来说说什么是spring
- spring是java企业的开源框架
- 更轻量
- 控制反正,实现松耦合
- 面向切面编程,把业务逻辑和系统服务分开
- 包含管理应用对象中的生命周期和配置
- 提供MVC框架
- 提供持续的事务管理接口,可以拓展上至本地事务,下到全局事务
- 提供方便的API把具体技术相关的异常转换为一致的unchecked异常
进入主题:
AOP
面向切面编程,在不修改原代码的基础上增加新功能
功能就不一一举例,感兴趣自己搜一下哈
AOP底层实现
- JDK动态代理(实现接口时使用)
- CGLIB动态代理(没有实现接口时使用)
JDK动态代理与CGLIB动态代理的区别
- JDK动态代理是利用反射机制生成一个实现代理的匿名类,在调用具体方法前调用InvokeHandler来处理
- CGLIB动态代理是利用asm开源包,对代理对象类class文件加载进来,通过修改字节码生成子类处理
IOC
控制反转,将对象交给Spring容器进行控制管理,而不再是以往的对象内部直接控制
IOC这一块有兴趣的自己搜一下哈,我这边没有太多的总结
DI
依赖注入,自身对象中的内置对象通过注入的方式创建
依赖注入的方式
1、构造方法注入
-
需要在构造方法上声明所依赖的参数列表,让Spring知道你需要依赖哪些东西。
-
优点:对象在构造完成之后,即已进入就绪状态,可以马上使用。
-
缺点:当依赖对象比较多的时候,构造方法的参数列表会比较长,构造方法无法被继承,无法设置默认值。对于非必须的依赖处理,可能需要引入多个构造方法,而参数数量的变动可能造成维护上的不便。
2、setter方法注入
-
将所需要依赖的属性,生成符合规范的set方法。
-
优点:方法可以命名、setter方法可以被继承、允许设置默认值。
-
缺点:就是对象无法在构造完成后马上进入就绪状态
3、接口注入
- 从注入方式的使用上来说,接口注入是现在不甚提倡的一种方式,基本处于“退 役状态”。因为它强制被注入对象实现不必要的接口,带有侵入性。而构造方法注入和setter 方法注入则不需要如此。
Spring框架中Bean的生命周期
- 从XML中读取bean定义,并实例化bean
- 根据bean的定义填充属性
- 如果bean实现了BeanNameAware 接口,Spring 传递bean 的ID 到 setBeanName方法。
- 如果Bean 实现了 BeanFactoryAware 接口, Spring传递beanfactory 给setBeanFactory 方法。
- 如果有任何与bean相关联的BeanPostProcessors,Spring会postProcesserBeforeInitialization()方法内调用它们。
- 如果bean实现IntializingBean了,调用它的afterPropertySet方法,如果bean声明了初始化方法,调用此初始化方法。
- 如果有BeanPostProcessors 和bean 关联,这些bean的postProcessAfterInitialization() 方法将被调用。
- 如果bean实现了 DisposableBean,它将调用destroy()方法。
好了,今天就先到这里吧 累了,下次什么时候想起来 什么时候来写一篇文章