您好,欢迎访问一九零五行业门户网

springaop(spring中的aop代理默认就是使用)

本文主要介绍spring aop(默认使用spring中的aop代理),下面一起看看spring aop(默认使用spring中的aop代理)相关资讯。
spring aop代理的详细介绍
前言:
一开始我对spring aop还是略知一二,但是这几天遇到了一个问题,看了一些spring相关的知识,感觉对这个问题有了更深的理解。所以写下来分享一下。
众所周知,spring支持各种aop模式,包括spring 自己的基于代理的aop和aspectj 基于编织的aop。如果一个类实现了一个或多个接口,spring将使用默认的jdk动态代理,如果没有实现接口,它将使用cglib作为代理。当然,我们也可以手动更改这些设置。这也是容易掉坑的部分。如果代理模式设置不正确,执行依赖注入时将出现beannotofrequiredtypeexception。
首先,让我们 让我们谈谈jdk动态代理,它将代理接口。具体来说,对象a实现了接口a和接口b..spring会创建一个代理对象,它实现了接口a和接口b,但是需要注意的是,代理对象与对象a无关..我们可以使用代理对象作为任何接口,但是我们可以 不要将代理对象转换成a类来使用。
假设我们现在有了下面的接口和类。
public interface interface a {} public classa实现接口a { }那么如果我们使用依赖注入来获取对象a,那么类型只能是接口a,如果类型写成class a,就会出现beannotofrequiredtypeexception。因为这里实际注入的对象是实现interfacea的代理对象,与classa无关..这种情况是spring建议的,使用接口进行编程。如果必须注入类,就需要使用cglib作为代理,也就是添加proxy-target-class = 真实 在aop配置中。
那么让我们 让我们来谈谈cglib代理。这是一个代理类,所以如果我们使用这个代理,我们可以在上面的情况中注入classa和interfacea。
最后,让 让我们谈谈aspectj 基于编织的s aop。所谓编织就是在生成的类文件中添加或修改代码,分为编译时编织和运行时编织。如果你用aspectj反编译一个woven类,你会发现这个类文件被aspectj修改了。由于aspectj s基于编织的特点,基于agent的aop的自引用和两个agent的问题在aspectj中不会出现。
感谢您的阅读,希望能帮到您,也感谢您对本站的支持!
标签:
代理if
了解更多spring aop(默认使用spring中的aop代理)相关内容请关注本站点。
其它类似信息

推荐信息