spring aop源码分析 (1-3)

SpringBean的生命周期

  1. 进入到刷新的方法refresh();
  2. finishBeanFactoryInitialization()初始化所有单例 对象
  3. preInstantiateSingletons(); 初始化所有的单例对象 注意:非懒加载
  4. getBean() → doGetBean() 先查询该对象是否有初始化过,没有话 就创建注册到IOC容器中
  5. createBean()创建对象 判断对象如果是为单例的情况下调用该方法
  6. doCreateBean()创建IOC对象
  7. createBeanInstance 使用java的反射技术实例化我们的对象
  8. populateBean 给对象set方法属性赋值
  9. invokeAwareMethods 判断bean的类型是否Aware相关依赖,如果存在的情况回调方法。
  10. initializeBean 执行初始化的方法(也可以自己自定义初始化的方法)
  11. applyBeanPostProcessorsBeforeInitialization 在初始化方法之前执行处理 (增强)
  12. invokeInitMethods 调用自定义init方法 (使用java的反射技术)
  13. applyBeanPostProcessorsAfterInitialization 在初始化方法之后执行处理(增强)
  14. 正常是用我们该bean对象
  15. 销毁bean。

核心的一个接口BeanPostProcessors 目的对我们bean对象自定义初始化方法实现曾强

SpringAop源码分析 需要关联SpringBean的生命周期

SpringAop源码分析

  1. @EnableAspectJAutoProxy 需要开启Aop的权限
  2. @Import(AspectJAutoProxyRegistrar.class)
  3. AspectJAutoProxyRegistrar 手动注册 切面类
  4. AnnotationAwareAspectJAutoProxyCreator 需要将该类注册的IOC容器中
  5. 注册bean信息内容:
    Beanid:org.springframework.aop.config.internalAutoProxyCreator
    class:AnnotationAwareAspectJAutoProxyCreator
    需要了解SpringAOP底层是如何实现的 离不开
    AnnotationAwareAspectJAutoProxyCreator
    得出结论:AnnotationAwareAspectJAutoProxyCreator祖宗是BeanPostProcessors子类。
  6. BeanPostProcessors 是对我们bean的初始化方法实现增强
    Init方法之前和之后处理
    AnnotationAwareAspectJAutoProxyCreator 本质其实就是对init方法实现增强。

后置处理器作用

任何bean对象在初始化之前都会调用AbstractAutoProxyCreator后置处理判断
是否需要创建代理类对象

public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
// 有具体前置业务逻辑处理
}
// 没有具体业务逻辑的
public Object postProcessBeforeInitialization(Object bean, String beanName) {
		return bean;
}

创建代理对象,如果被代理的这个类如果实现了接口的话,也就使用JDK动态代理,如果没有实现接口则使用cglib。

后置通知

  1. postProcessAfterInitialization
  2. wrapIfNecessary 判断该对象是否在aop切入点扫包范围内
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值