Spring简介

一、Spring是什么

1. Spring框架是一个Java平台,帮助开发人员封装了开发中的基础性的通用问题,让开发人员专注于应用程序的开发

2. Spring的主要模块有:核心容器、数据访问/集成、事务、Web(MVC)、AOP、消息和测试模块

二、控制反转(IOC)和依赖注入(DI)

1. 控制反转:一个对象的实例化B本来是由另一个类A控制的,现在把这个控制权交出去,由别人来控制

2. 依赖注入:对象A依赖另一个对象B,对象B可以在编译阶段就实例化好,并在使用的时候注入到调用方A,而不在调用方A里实例化

3. 依赖注入的方式:构造器注入(通过构造函数的参数传入)、setter方法注入(通过setter方法的参数传入)、接口注入(Spring中不使用这种方式)

三、Spring框架中的IoC容器

1. IoC容器通过读取配置来创建对象,并管理对象的生命周期

2. 两种IoC容器

a. BeanFactory:可以配置任何类型的对象,将bean实例化,是Spring IoC的具体实现

b. ApplicationContext:对BeanFactory进行了扩展,支持事件和监听器

ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”); //相对路径
ApplicationContext context = new FileSystemResource(“C:acean.xml”); //绝对路径

3. 实现机制:工厂模式+反射

四、Spring Bean

1. 在配置文件中配置,由Spring IoC容器创建实例,而不是由应用程序创建实例,是程序的主要的对象

2. 三种配置方式

a. 基于XML的配置,<bean>标签配置,指定某个类是bean

<bean id="aClass" class="com.test.AClass"/>

b. 基于注解的配置,在类上使用注解,在配置文件里自动扫描,即开启自动装配bean

<context:annotation-config/> 也打开了注解的自动装配
<context:component-scan base-package=”pagkage1[,pagkage2,…,pagkageN]”/>

或者
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

c. 基于Java API的配置:在Java类上使用@Bean & @Configuration注解

3. 内部bean:当一个类A里使用了另一个类B,将他们声明为bean时,将B用作A的属性,B声明的bean为内部bean

4. 作用域:最常用的是singleton和prototype

a. singleton:每个bean都是单例,是默认的作用域

b. prototype:每次请求都会产生一个新的实例

c. 单例bean某种程度上是线程安全的,但bean需要有状态时,不是线程安全的

五、Spring Bean的装配

1. bean的装配:Spring容器使用依赖注入把bean都绑定在一起

2. 自动装配:通过检查BeanFactory的内容,让Spring自动解析bean的协作者

3. 自动装配的模式

a. 默认为no,没有自动装配,使用显式bean引用,进行装配

b. byName,根据bean的名称注入对象依赖项

c. byType,根据类型注入对象依赖项

d. 构造函数

e. 自动检测

<context:annotation-config/>

六、Spring Bean的生命周期:创建->使用->销毁

七、注解

1. @Required:用于setter方法,必须要设置此属性

2. @Autowired:自动装配依赖的对象,是Spring级别的,可以作用于成员变量、setter方法、类的构造函数

3. @Qualifier:有多个相同类型的bean时,指定其中一个bean来消除歧义

4. @Resource = @Autowired + @Qualifier,按名称来自动装配依赖的对象,是JDK级别的

5. @RestController = @ResponseBody + @Controller,@RestController只返回body里的内容,不能返回页面(jsp/html)和跳转

6. list类型自动注入:通过@Autowired,Spring会自动从容器中取出N个相同类型的bean装配到List类型中,从而简化了依赖注入的过程

7. Map类型自动注入: 通过@Autowired,Spring会自动从容器中取出N个相同类型的bean以及bean的名称,注入到Map类型的converters中,此时该map得key对应为bean的名称,value则为对应bean对象

8. @RequestBody, 根据request header Content-Type的值来决定是否使用;@ResponseBody,非html的数据,例如json/xml

9. 执行顺序:@Constructor->@Autowired->@PostConstruct,并且@PostConstruct必须用于无参构造函数

八、事务

1. 声明式事务,使用注解@Transaction或者XML配置

2. 编程式事务,通过代码实现事务

九、用到的设计模式

1. 工厂模式:BeanFactory

2. 单例模式:Spring Bean默认实例化为单例对象

3. 代理模式:AOP

4. 模板方法:JDBC

原文地址:https://www.cnblogs.com/june0816/p/6803795.html