在Spring框架中,自动代理是通过AOP(面向切面编程)实现的一种机制,用于为Bean生成代理。Spring支持不同类型的自动代理,主要有两种:
-
JDK动态代理(JDK Dynamic Proxy):
- 这是基于Java动态代理机制的一种代理方式,只能代理实现了接口的类。Spring通过在运行时创建代理对象,实现了对目标对象的包装。
-
如果目标对象实现了至少一个接口,Spring会使用JDK动态代理。以下是一个示例:
public interface MyService { void myMethod(); } public class MyServiceImpl implements MyService { @Override public void myMethod() { // 实现 } }
<bean id="myService" class="com.example.MyServiceImpl" />
如果启用了自动代理,Spring将自动为
myService
生成一个实现了MyService
接口的代理对象。
-
CGLIB代理(CGLIB Proxy):
- 对于没有实现接口的类,Spring将使用CGLIB(Code Generation Library)创建代理对象。CGLIB通过生成目标类的子类来实现代理,因此不要求目标类必须实现接口。
-
如果目标对象没有实现接口,Spring会使用CGLIB代理。以下是一个示例:
public class MyService { public void myMethod() { // 实现 } }
<bean id="myService" class="com.example.MyService" />
如果启用了自动代理,Spring将使用CGLIB为
myService
生成一个代理对象。
自动代理的选择取决于目标对象是否实现了接口。如果实现了接口,Spring将使用JDK动态代理;如果没有实现接口,Spring将使用CGLIB代理。在Spring的AOP中,自动代理通常通过<aop:aspectj-autoproxy>
或者@EnableAspectJAutoProxy
来启用。
Was this helpful?
0 / 0