侧边栏壁纸
博主头像
毕发胖博主等级

沉默会被理解为赞同

  • 累计撰写 8 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

Spring入门

毕发胖
2022-04-17 / 0 评论 / 2 点赞 / 529 阅读 / 5,773 字
温馨提示:
本文最后更新于 2022-04-17,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

1、Spring

1.1 Spring 简介

  • Spring:春天------>给软件行业带来了春天!
  • 2002,首次推出了 Spring 框架的雏形:interface21 框架!
  • 2004,Spring 框架即以 interface21 框架为基础,经过重新设计,发布了1.0正式版。
  • Spring 理念:使现有的技术更加容易使用
  • 官网:https://spring.io/

下载方式:

官方下载地址:https://repo.spring.io/release/org/springframework/spring/

GitHub:https://github.com/spring-projects/spring-framework

maven 方式:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

1.2 优点

  • Spring 是一个开源的免费的框架(容器)!
  • Spring 是一个轻量级的、非入侵式的框架!
  • 控制反转(IOC),面向切面编程(AOP)!
  • 支持事务的处理,对框架整合的支持!
    总结一句话:Spring 就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架!

1.3 Spring 的组成

image.png

Spring Core(核心容器):Spring 框架底层 提供框架的基本功能 Spring使用 BeanFactory 来产生和管理 Bean 也就是工厂模式的实现
BeanFactory 使用控制反转(IoC)模式将应用的配置和依赖性规范与实际的应用程序代码分开

Spring Context(上下文):Spring Context 是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,如 JNDI、EJB、电子邮件、国际化、校验和调度功能

Spring AOP(AOP面向切面编程):Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。

Spring DAO(JDBC模块和DAO模块):JDBC、DAO 的抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理,和不同数据库供应商所抛出的错误信息。异常层次结构简化了错误处理,并且极大的降低了需要编写的代码数量,比如打开和关闭链接。

Spring ORM(对象实体映射):Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 对象的关系工具,其中包括了 Hibernate、JDO 和 IBatis SQL Map 等,所有这些都遵从 Spring 的通用事物和 DAO 异常层次结构。

Spring Web(web模块):Web上下文模块建立在应用程序上下文模块之上,为基于web的应用程序提供了上下文。所以 Spring 框架支持与 Struts 集成, web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

Spring Web MVC(MVC模块):MVC 框架是一个全功能的构建Web应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的。MVC容纳了大量视图技术,其中包括 JSP、POI 等,模型来有 JavaBean 来构成,存放于m当中,而视图是一个街口,负责实现模型,控制器表示逻辑代码,由c的事情。Spring框架的功能可以用在任何J2EE服务器当中,大多数功能也适用于不受管理的环境

2、Spring核心之IOC(控制反转)

2.1 IOC的概念

IOC 是指在程序开发中,实例的创建不再由调用者管理而是由 Spring 容器创建。Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 Spring 容器中,控制权发生了反转,这就是 Spring 的 IOC 思想

2.2实现方法实例

平常我们生成对象的方法是这样的:

public class Person{
	private String name="毕发胖";
	private String age="19";
	public Person(){
		System.out.println("name="+name+",age="+age);
	}
}

然后进行测试:

public  class Test1 {
	@Test
	public void test01(){
		 Person person =  new Person();
	}
}

测试结果:
	姓名:毕发胖,年龄:19

但是我们 Spring 的 IOC 思想是控制反转,就是对象(实例)的创建不是由调用者也就是我们自己来管理,而是由 Spring 容器来管理

Spring 示例:

PoJo 类

package com.kkb.pojo
public class Person{
	private String name="毕发胖";
	private String age="19";
	public Person(){
		System.out.println("name="+name+",age="+age);
	}
}

application.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
       <!-- beans: 是spring的根标签,在beans里面配置自己的对象
            bean: 在spring相当于java的对象,需要把类配置到容器中
            id=""   : 标识,相当于该类的对象名,唯一
            class="包名.类名(全限定名)": 包名.类名,通过反射创建该类的对象(这里不能写接口名)
            -->
    <!--创建对象,需要声明bean,告知Spring要创建哪些对象-->
    <bean id="person" class="com.kkb.pojo.Person"></bean>   
    
</beans>

测试类:

public  class Test1 {
	@Test
	public void test01(){
        //Spring 容器创建对象的方式
		ApplicationContext factory = new ClassPathXmlApplicationContext("application.xml");
        Person person=(Person) factory.getBean("person");	//因为默认是 Object 类型所以需要强制转换
	}
}

测试结果:
	姓名:毕发胖,年龄:19

这样就从原来的,我们程序员自己创建对象变成了 Spring 容器帮我们创建对象

2.3 Spring 容器创建对象的方式

实体类:

package com.kkb.pojo
public class Person{
	private String name;
	private String age;
	public Person(){
		System.out.println("name="+name+",age="+age);
	}
    public Person(String name,String age){
		this.name=name;
        this.age=age;
        System.out.println("name="+name+",age="+age);
	}
}

2.3.1.通过默认的构造方法

<bean id="person1" class="com.kkb.pojo.Person"></bean>

2.3.2.通过带参数的构造方法

<bean id="person2" class="com.kkb.pojo.Person">
    <!--name 是代表该类的属性值,value 代表给这个属性赋的值-->
	<constructor-arg name="name" value="桥本有菜"/>
    <constructor-arg name="age" value="25"/>
</bean>

2.3.3.通过工厂方法

Factory(工厂方法)

package com.kkb.Factory.PersonFactory;
public class personFactory {
    //通过执行personFactory.getUserStaticInstance();就会帮助我们创建一个 Person 对象
    public static Person getPersonStaticInstance(){
        System.out.println("通过Spring调用工厂中静态方法创建对象");
        return new Person("查","18");
    }
  
    public Person getPersonInstance(){
        System.out.println("通过Spring调用工厂中实例方法调用对象");
        return new Person("毕","19");
    }
}

再通过配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    
     <!--工厂方法:静态/实例方法-->
    <!--静态方法创建对象
		因为要使用工厂的方法,所以这里的class是com.kkb.Factory.PersonFactory,然后指定该工厂类的方法
		这样当我们执行getBean("Person1")时,就相当于创建了Person对象-->
    <bean id="Person1" class="com.kkb.Factory.PersonFactory" factory-method="getPersonStaticInstance"></bean>

    <!--实例方法创建对象
		实例方法创建对象需要先创建工厂对象,然后再factory-bean里面把工厂对象放进去,然后再指定该工厂类的方法-->
    <bean id="factory" class="com.kkb.Factory.PersonFactory"></bean>
    <bean id="Person2" factory-bean="factory" factory-method="getPersonInstance"></bean>
</beans>

2.4 IOC 总结

控制反转 lOC (Inversion of Control)

  • IOC(控制反转):不是什么技术,而是一种设计思想。在 Spring 开发中,由 IOC 容器控制对象创建、初始化、销毁等。这也就实现了对象控制权的反转由我们对对象的控制转变成了 Spring IOC 对对象的控制
  • DI(依赖注入):是 IOC 的具体实现。程序把依赖交给容器,容器帮你管理依赖(也有人认为 DI 就是 IOC 的另一种说法)
2

评论区