当前位置:实例文章 » JAVA Web实例» [文章]spring复习:(36)AopProxyFactory接口的默认(唯一)实现: DefaultAopProxyFactory

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

相关标签:springjava后端
其他信息

其他资源

Top