使用@EnableAspectJAutoProxy发现方面的“手动”编织bean

时间:2013-03-21 22:47:53

标签: java spring annotations aspect proxyfactory

我正在使用完全无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);

我试过环顾四周但似乎无法找到答案。也许我只是看起来不够好。 如果你能帮助我,请提前致谢!

1 个答案:

答案 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>