Spring:(java轻量级框架)
1:Spring的优点/缺点:
优点 | 缺点 |
低耦合 | 配置文件过多 |
面向切面编程 | 过于庞大,结构太复杂,性能上面会有一定损耗 |
可以与第三方框架进行整合应用 |
|
支持声明式事务处理 |
|
2:Bean对象的作用域:
通过Scope属性定义或者@Scope注解
默认为(单例),可以更改为(原型)
3:Spring中的重点(IOC&&AOP)
IOC:控制反转:
对象的创建不再由程序员创建,而是全部交给容器去进行创建,并且由spring框架来协调对象间的依赖关系,这也是spring的核心,在底层它是通过反射来实现的。(可以通过反射获取类属性和方法,并且对其进行操作)
DI:依赖注入,控制反转的实现方式
原理:不再由自身控制代码,而是由框架进行代码的控制,从而产生控制权的反转。
基于构造方法的注入 |
基于set方法的注入 |
基于注解的注入(@Autowrite) |
AOP:面向切面编程
以前的代码是按照逻辑来运行,而面向切面就相当于在一条河流中开辟支流,加入自己的逻辑,但是不影响自身的运行。
4:Spring的Bean有哪些作用域:
Singleton:(单例,默认)SpringIOC容器只会创建该Bean的唯一实例
Prototype:每次请求都创建一个实例
Request:每次请求都会创建一个新的Bean
Session:每次会话都会创建一个实例
gloal-Session:全局作用域
注意:Singleton不是线程安全,一个容器中只有一个实例,那么多个请求访问通一个实例,那么就会出现多个线程并发访问同一个对象。这样是不安全的。
解决办法:(可以使用ThreadLocal进行处理)
原理:ThreadLocal的实例代表了一个线程局部的变量,每条线程都只能看到自己的值,并不会意识到其它的线程中也存在该变量。
它采用采用空间来换取时间的方式,解决多线程中相同变量的访问冲突问题。
5:Spring配置的三种方式:
1:基于XML的配置:
原理:Spring的IOC容器启动时就需要传入一个配置文件,才能以此为基础创建一个容器,并且实例化、配置配置文件中配置好的Bean。
Spring 配置文件用于指导Spring 工厂生产Bean,并进行依赖关系的注入。
一般在applicationContext.xml配置文件,可以修改。
2:基于注解的配置:
开启注解扫描后,就可以用注解的方式在Spring中向属性、方法和构造方法中自动装配变量。
@Required | 该注解应用于设置方法。 |
@Autowired | 该注解应用于有值设值方法、非设值方法、构造方法和变量。 |
@Qualifier | 该注解和@Autowired注解搭配使用,多个bean时可以选择执行顺序。 |
3:基于java的配置
由@Configuration注解和@Bean注解来实现的。
由@Bean注解的方法将会实例化、配置和初始化一个新对象,这个对象将由Spring的IoC容器来管理。
被@Configuration所注解的类则表示这个类的主要目的是作为资源文件。
7:Spring的事务管理:
防止出现脏数据,防止数据库数据出现问题
TransactionMananger:事务管理器
8:Spring框架中Bean的生命周期:
Spring容器从XML文件中读取Bean的定义,并实例化Bean。
Spring根据Bean的定义填充所有的属性。
如果Bean实现了BeanNameAware接口,Spring传递Bean到ID到setBaenName方法。
如果Bean实现了BeanFactoryAware接口,Spring传递BeanFactory给SetBeanFactory方法。
如果Bean实现了IntializingBean接口,调用它的AfterPropertySet方法
如果Bean实现了DisposableBean接口,调用它的Destory方法
如果Bean声明了初始化方法,调用此初始化方法·
自动装配模式:
No | 默认的方式是不进行自动装配,通过手工设置ref 属性来进行装配bean |
ByName | 按属性名称,@Resource默认按 byName自动注入 |
ByTYPe | 按类型:@Autowrite默认按byType自动注入 |
Construct | 构造方法中的参数通过byType的形式,自动装配 |
Default | 由上级标签<beans>的default-autowire属性确定 |
BeanFactory和ApplicationContext有什么区别:
1).BeanFactroy采用的是延迟加载形式来注入Bean的。
而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。
2).BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册