spring复习:(36)AopProxyFactory接口的默认(唯一)实现: DefaultAopProxyFactory
发布人:shili8
发布时间:2024-12-28 16:02
阅读次数:0
**Spring AOP代理工厂**
在 Spring 的 AOP (Aspect-Oriented Programming) 体系中,`AopProxyFactory` 接口扮演着重要角色。它负责创建 AOP代理实例,这些代理实例将被用于拦截和处理方法调用。
**DefaultAopProxyFactory**
`DefaultAopProxyFactory` 是 `AopProxyFactory` 接口的唯一实现类。它提供了一个基本的实现,能够创建 AOP代理实例。
### 构造函数
javapublic DefaultAopProxyFactory() { super(); }
构造函数非常简单,没有任何参数。
### createAopProxy 方法这是 `DefaultAopProxyFactory` 的核心方法。它负责创建 AOP代理实例。
java@Overridepublic AopProxy createAopProxy(AdvisedSupport config) throws Exception { if (config.isOptimize()) { // 如果配置了优化,使用Cglib动态代理 return new CglibAopProxy(config); } else { // 否则使用JdkDynamicAopProxy return new JdkDynamicAopProxy(config); } }
这个方法首先检查是否开启了 AOP优化。如果开启了,会使用 CGLIB 动态代理来创建 AOP代理实例。否则,会使用 JDK 动态代理。
### 其他方法`DefaultAopProxyFactory` 还提供了一些其他方法,主要用于内部使用。
java@Overridepublic boolean isOptimize() { return false; } @Overridepublic void setOptimize(boolean optimize) { }
这些方法都是空实现,没有任何功能。
**CglibAopProxy**
这是一个用于 CGLIB 动态代理的类。它负责创建 AOP代理实例,使用 CGLIB 来拦截和处理方法调用。
javapublic class CglibAopProxy implements AopProxy, JdkRegressionAware { private final AdvisedSupport config; public CglibAopProxy(AdvisedSupport config) { this.config = config; } @Override public Object getProxy() { return createCglibProxy(); } }
这个类负责创建 AOP代理实例,使用 CGLIB 来拦截和处理方法调用。
**JdkDynamicAopProxy**
这是一个用于 JDK 动态代理的类。它负责创建 AOP代理实例,使用 JDK 来拦截和处理方法调用。
javapublic class JdkDynamicAopProxy implements AopProxy { private final AdvisedSupport config; public JdkDynamicAopProxy(AdvisedSupport config) { this.config = config; } @Override public Object getProxy() { return createJdkProxy(); } }
这个类负责创建 AOP代理实例,使用 JDK 来拦截和处理方法调用。
**总结**
`DefaultAopProxyFactory` 是 `AopProxyFactory` 接口的唯一实现类。它提供了一个基本的实现,能够创建 AOP代理实例。通过检查是否开启了 AOP优化,如果开启了,会使用 CGLIB 动态代理来创建 AOP代理实例。否则,会使用 JDK 动态代理。
`CglibAopProxy` 和 `JdkDynamicAopProxy` 是用于 CGLIB 和 JDK 动态代理的类。它们负责创建 AOP代理实例,使用相应的技术来拦截和处理方法调用。