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代理实例,使用相应的技术来拦截和处理方法调用。

