Spring AOP原理之源码学习

1.springaop应用----增强一个方法—增强一个类/对象
  • 1.到官网查看文档
  • 2.@AspectJ
    AOP--------面向切面的目标
    spring aop -----手段
    AspectJ --------手段
    由于spring2.5实现aop由诟病,所以借助了AspectJ 语法style
    构建Aspect步骤:
    • 1.@EnableAspectJAutoProxy
    • 2.配置一个类加上@Component加入bean容器
    • 3.@Aspect声明一个切面
    • 4.方法的集合称为一个@Pointcut,里面连接点(连接点的最小单位称之方法,一个表达式可以实现多个连接点)
    • 5.aop通知@Before(方法名)等(一个术语):
      切入连接点的时机或内容

切点和连接点和通知所在的类称为一个切面–Aspect

2.源码
	//所以代理对象在初始化的时候已经代理放到了map中调用了refresh()----preInstantiateSingletons()---getBean(beanName)----doGetBean()---getSingleton(beanName)
	//initializeBean完成了目标对象到代理的改变(BeanPostProccessor),
	//singletionObjects.put(beanName,singletionObject)存入了map
	AnnotationConfigApplicationContext ac = 
		new AnnotationConfigApplicationContext(Appconfig.class); 
	
	//看源码得出getBean---map.get("KEY")
	UserDao user = ac.getBean(UserDao.class);
	
	//user对象被改变(代理)
	user.query();
  • aop把我们原来的对象user改变了,从目标对象target改变为了proxy,bean中只存在了改变的对象.
  • proxy有两种方法:
    • 1.直接获取一个代理对象 //getBean
    • 2.首先产生一个目标对象然后对目标对象进行代理返回代理对象 //doCreateBean(){}

aop原理理解:(在中间一步)spring会调用采用BeanPostProccessor接口对它返回一个代理对象(底层通过2方法完成(1.cglib 2.jdk状态代理))

发布了12 篇原创文章 · 获赞 2 · 访问量 427

猜你喜欢

转载自blog.csdn.net/weixin_43308406/article/details/102508266