Spring
什么是Spring
- Spring是一个轻量级的框架,它可以管理对象的配置和声明周期,是一个容器。
- Spring有IOC控制反转功能。
- Spring有AOP面向切面功能。
AOP的概念
AOP是面向切面功能,通过代理模式来实现的。
AOP把一些需要在业务中反复重复的代码(事务,日志等)抽离出来,然后封装进切面中。需要使用切面的时候,可以不改动任何业务逻辑的源码。
AOP的代理使用时机
- 在类没有实现接口时,使用CGlib动态代理。
- 类实现接口时,使用JDK动态代理。
AOP的相关注解
@Aspect
表示这个类是一个切面类@Before
前置通知,表示在某个连接点之前执行@After
后置通知,表示在某个连接点退出之后的通知@AfterReturning
返回后通知,某连接点正常执行后的通知,返回值用returning属性接收。
IOC的概念
IOC控制反转和依赖注入
IOC是控制反转,简单来说就是原来对象之间的依赖是要手动去创建对象,而IOC则是把创建对象和依赖注入交给容器去做,在Spring中管理对象就是通过IOC去做的。
- 举例:如果Car类的属性需要一个Engine的对象,不使用IOC的时候需要手动去new这个Engine对象,使用了IOC的话,只需要在Car的属性定义一个Engine类型的成员变量,容器会自动创建一个Engine对象并注入。
Spring的Bean的生命周期
- 解析类获得BeanDefinion
- 实例化对象
- 对实例化对象根据@autowired注解进行依赖注入
- 如果实现了BeanNameAware接口,则调用SetBeanAware方法。
- 如果是想了BeanFactoryAware接口,则调用SetBeanFactory方法。
- Bean就绪,可以使用Bean了
- Spring容器关闭时调用DisposableBean中的destory方法。
Bean的作用域
- singleton:默认,每个容器中只有一个Bean的实例,单例的bean由BeanFactory去维护,声明周期和IOC容器是一致的。
- prototype:原型模式,为每一个Bean请求提供一个实例
- Request:在Http请求时创建单例对象
- Session:在每个Session中创建Bean的实例
- goble-session:全局作用域,一般用于portlet容器,当时现在一般不用portlet了。