天天看点

【框架】[Spring]AOP拦截-三种方式实现自动代理用Spring一个自动代理类DefaultAdvisorAutoProxyCreator:自己写一个自动代理底层实现:使用aop标签配自动代理

这里的自动代理,我讲的是自动代理bean对象,其实就是在xml中让我们不用配置代理工厂,也就是不用配置class为org.springframework.aop.framework.ProxyFactoryBean的bean。

总结了一下自己目前所学的知识。

发现有三种方式实现自动代理

例如:

原来不用自动代理的配置文件如下:

现在改用自动代理,如下配置:

相对于前面,也就是把代理工厂部分换成自动代理了。

【框架】[Spring]AOP拦截-三种方式实现自动代理用Spring一个自动代理类DefaultAdvisorAutoProxyCreator:自己写一个自动代理底层实现:使用aop标签配自动代理

我们也可以写一个类,来实现DefaultAdvisorAutoProxyCreator自动代理的功能!

首先,我们需要实现一个接口,也就是BeanPostProcessor接口。

BeanPostProcessor接口作用是:如果我们需要在Spring容器完成Bean的实例化、配置和其他的初始化前后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现,然后注册到容器中。

而我们想要在原型对象bean被创建之后就代理了,就必须在原来的容器中拿到原来的原型对象,需要拿到原来spring容器中的切面对象,这个时候,我们就需要原来的容器,这个时候就需要另一个接口,也就是ApplicationContextAware接口!

通过这2个接口,我们就可以实现自动代理了。

测试结果就不上图了,和前面是一样的。

其实很多时候,我们如果自己去练一下底层,对上层的框架更好理解。

还有一种方法。

需要在beans加一个命名空间

还需要配xsi:schemaLocation,为aop加一个网络地址。

我们需要一个aspectjweaver-jar包:

下载地址:

<a href="http://mvnrepository.com/artifact/org.aspectj">http://mvnrepository.com/artifact/org.aspectj</a>

【框架】[Spring]AOP拦截-三种方式实现自动代理用Spring一个自动代理类DefaultAdvisorAutoProxyCreator:自己写一个自动代理底层实现:使用aop标签配自动代理

个人觉得能学会使用一种就OK了,不用全部记下来,为了学习,都了解一下就好,别人写出来,能看懂就好。

哈哈,其实底层学好了,自己写的时候,就算不会用Spring的自动代理,自己写出来底层也是蛮好的嘛