使用@AspectJ代理的编程创建

除了通过使用<aop:config><aop:aspectj-autoproxy>在配置中声明切面外,还可以通过编程方式创建通知目标对象的代理。有关Spring的AOP API的完整详细信息,请参阅下一章。在这里,我们希望专注于使用@AspectJ切面自动创建代理的能力。

您可以使用org.springframework.aop.aspectj.annotation.AspectJProxyFactory类为一个或多个@AspectJ切面通知的目标对象创建代理。该类的基本用法非常简单,如下例所示:

  • Java

  • Kotlin

// 创建一个可以为给定目标对象生成代理的工厂
AspectJProxyFactory factory = new AspectJProxyFactory(targetObject);

// 添加一个切面,该类必须是@AspectJ切面
// 您可以根据需要多次调用此方法,使用不同的切面
factory.addAspect(SecurityManager.class);

// 您还可以添加现有的切面实例,提供的对象的类型必须是@AspectJ切面
factory.addAspect(usageTracker);

// 现在获取代理对象...
MyInterfaceType proxy = factory.getProxy();
// 创建一个可以为给定目标对象生成代理的工厂
val factory = AspectJProxyFactory(targetObject)

// 添加一个切面,该类必须是@AspectJ切面
// 您可以根据需要多次调用此方法,使用不同的切面
factory.addAspect(SecurityManager::class.java)

// 您还可以添加现有的切面实例,提供的对象的类型必须是@AspectJ切面
factory.addAspect(usageTracker)

// 现在获取代理对象...
val proxy = factory.getProxy<Any>()

有关更多信息,请参阅javadoc