0

私は完全に非 XML の Spring セットアップを使用しており、自分のクラスで正常に使用@EnableAspectJAutoProxyして、と@Configurationの組み合わせでアスペクト クラスを見つけています。@Aspect@Component

しかし、春のコンテキストで作成されていないインスタンスをオンデマンドで織り込み/強化する必要があるところまで来ましたが、見つけることができるのはProxyFactory. しかし、その後、 でアドバイスを手動で追加する必要がありますProxyFactory.addAdvice(..)。これは、(たとえば) で一度書いたものです@Before

私はそれらを再び書き直したくありません。

@EnableAspectJAutoProxy注釈を使用して、内部で作成された (私は推測しますか?) ファクトリへの参照を取得する方法はありますか? 私は次のようなことができるように:

@Autowired
private AspectJAutoProxyInstanceFactory f; // made up class, of course
[...]
Object bean = f.weave(obj);

または、どのアドバイスがアプリケーションに既に存在するかを把握できるファクトリをインスタンス化します。

// Also a made up class, of course.
ApplicationContextAwareProxyFactory f = new ApplicationContextAwareProxyFactory(applicationContext);
Object bean = f.weave(obj);

私は周りを見回そうとしましたが、答えを見つけることができないようです。私が見るのが苦手なだけなのかもしれません。あなたが私を助けることができれば、事前に感謝します!

4

1 に答える 1

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>
于 2013-03-21T23:17:39.970 に答える