Spring框架(未完成)

IOC的理解

IOC概念:

控制反转,指创建对象的控制权的由自己主动创建变为交给springIOC容器去创建,并由容器根据配置文件
去创建实例和管理各个实例之间的依赖关系.

IOC原理:

是使用java的反射机制,根据配置文件在运行时动态创建管理调用对象的方法.

IOC作用:

使相互协作的组件保持松耦合.提高可复用性

IOC实现:

DI(依赖注入) 注入方式:构造器注入,setter方法注入,根据注注入

AOP的理解

AOP概念:

面向切面编程,在不改变我们原有代码的情况下,通过代理的方式对原有方法进行增强,例如权限认证/事务处理/日志编辑等

AOP代理模式:

静态代理模式:在我们的代码编译成字节码文件的时候,spring将我们的增强内容织入到字节码文件中.那么在运行的时候,被执行的就是我们织入过切面的增强过的字节码文件.典型例如AspectJ

动态代理模式:不会修改字节码文件.而是每次字节码文件运行的时候都会在内存中临时生成一个AOP对象.它包含了对象的全部方法而且还在特定地方做了增强处理
AOP动态代理分为 JDK动态代理CGLIB动态代理

Spring动态代理的选择:

JDL动态代理要求被代理对象实现InvocationHandler接口和Proxy类.如果被代理对象没有实现InvocationHandler接口,则Spring会自动选择CGLIB进行动态代理.
CGLIB动态代理要求被代理类不能用final修饰

Spring Bean的生命周期

SpringBean的生命周期和Servlet的生命周期类似 初始init() 接收处理请求service() 销毁destroy().
不同的是springBean的管理配置有两个接口实现,分别是BeanFactory和ApplicationContext,且分为单例和多例
BeanFactory:spring管理和配置bean的基础接口:
单例:

  • 创建: 首次getBean()创建 之后每次getBean()都获取首次创建的对象(注意这里并不会在容器生成时创建)
  • 存活: 容器存活时存活
  • 销毁: 容器关闭时消亡

多例:

  • 创建: 每次getBean()都会创建
  • 存活: 我们使用时一直存活
  • 销毁: 长时间不用且没有引用时由GC回收

ApplicationContext:在BeanFactory的基础上进行了增强和扩展服务
单例:

  • 创建: 容器创建时创建
  • 存活: 容器存活时存活
  • 销毁: 容器关闭时消亡

多例:

  • 创建: 每次getBean()都会创建
  • 存活: 我们使用时一直存活
  • 销毁: 长时间不用且没有引用时由GC回收

细致化Bean的生命周期:

Bean创建
  1. 容器调用InstatiantionAwareBeanPostProssor的postProssorBeforeInstantiation()方法
  2. 容器调用createBean进行实例化
  3. 容器调用InstatiantionAwareBeanPostProssor的postProssorAfterInstantiation()方法 对已经实例化的对象进行修饰
  4. 容器调用InstatiantionAwareBeanPostProssor的postProssorPropertyValue()方法
  5. 实例化对象被封装在BeanWrapper对象中,Spring根据BeanDefinition中的信息以及BeanWrapper提供的接口设置对象属性(依赖注入)
  6. 如果Bean实现了BeanNameAware接口,则调用setBeanName(),通过配置文件将Bean的id值设置到Bean当中 —Bean级生命周期接口的方法
  7. 如果Bean实现了BeanFactoryAware接口,则调用setBeanFactory(),将BeanFactory容器实例(Spring工厂自身)设置到Bean当中
  8. 如果Bean装配了BeanPostProssor后处理器,则会调用postProssorBeforeInstantiation()方法,对Bean进行加工.由于这个方法是在Bean初始化结束时调用的,所以可以被应用于内存或缓存技术;
  9. Bean调用InitializingBean的afterPropertiesSet();
  10. 执行配置的init-method对应的初始化方法
  11. 如果Bean装配了BeanPostProssor后处理器,则会调用postProssorAfterInstantiation()方法,容器再次获得对Bean进行加工的机会
后续生命周期管理

此时单例多例分道扬镳:

  • 单例:Bean对象放入springIOC缓存池,并把引用交给使用者,后续生命周期由spring管理
  • 多例:Bean对象交给使用者,由使用者管理后续生命周期
Bean销毁
  • 当容器关闭时,会调用DisposableBean的afterPropertiesSet()方法,可以记录日志或者释放资源
  • 调用配置文件中配置的destroy-method销毁方法

Spring支持的Bean的作用域

  • singleton : 单例 默认 每个容器中只有一个Bean实例. 这个模式由BeanFactory自身维护
  • prototype: 多例 每次getBean()都会获取一个新建的实例
  • request: 为每个网络请求创建一个实例, 请求完成后会被GC回收
  • session: 为每个网络请求创建一个实例,且一个会话只有一个实例.session过期后,bean会随之失效。
  • global-session: 全局作用域. global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。全局作用域与Servlet中的session作用域效果相同。

spring常见的注解

  • @Configuration:声明配置类.表名当前类为IOC容器.
  • @Bean:用在配置类的方法头上,表明作为当前配置类(容器)的Bean对象
  • @Scope: 表明Bean的作用域
  • @Controller: 表明当前类为控制层组件
  • @Service: 表明当前类为业务层组件
  • @Repository:表明当前类为数据访问组件,即DAO组件。
  • @Component: 泛指组件.用于标注不好区分的组件.
  • @PostConstruct: 用于指定初始化方法(用在方法上)
  • @PreDestory: 用于指定销毁方法(用在方法上)
  • @Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。@Autowired@Qualifier(“personDaoBean”) 存在多个同类型实例时,配合使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值