我正在使用完全无XML的Spring设置,并且我成功地将@EnableAspectJAutoProxy
与@Configuration
类一起使用,并使用@Aspect
和{{1}的组合查找我的方面类}}
但是我已经达到了这样的程度,即我需要按需编织/增强不是使用spring上下文创建的实例,但我能找到的只是如何使用@Component
来实现。
但是我需要手动添加ProxyFactory
的建议,我已经用ProxyFactory.addAdvice(..)
编写了一次。
我不想再重写那些。
有没有办法通过使用@Before
注释来获取对内部创建的工厂的引用(我猜?)?所以我可以做类似的事情:
@EnableAspectJAutoProxy
或者实例化一个工厂,可以找出我的应用程序中已有的建议:
@Autowired
private AspectJAutoProxyInstanceFactory f; // made up class, of course
[...]
Object bean = f.weave(obj);
我试过环顾四周但似乎无法找到答案。也许我只是看起来不够好。 如果你能帮助我,请提前致谢!
答案 0 :(得分:2)
我希望我理解这个问题。
要实现这一点,您可以在没有弹簧的情况下使用编译时编织。它比spring的基于代理的方法更强大,你不必改变方面,因为Spring已经从AspectJ借用了@Aspect注释。
您可以使用maven和aspectj-maven-plugin
轻松实现这一目标以下是配置示例:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<goals>
<goal>compile</goal> <!-- use this goal to weave all your main classes -->
<goal>test-compile</goal> <!-- use this goal to weave all your test classes -->
</goals>
</execution>
</executions>
</plugin>
如果你想编织第三方jar中的代码,可以这样配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>aspectj-maven-plugin</artifactId>
<version>1.4</version>
<configuration>
<weaveDependencies>
<weaveDependency>
<groupId>org.agroup</groupId>
<artifactId>to-weave</artifactId>
</weaveDependency>
<weaveDependency>
<groupId>org.anothergroup</groupId>
<artifactId>gen</artifactId>
</weaveDependency>
</weaveDependencies>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>