2

Maven、Spring、Aspectjを使用したコンパイル時のウィービングを使用しています

私のaspectjアドバイザーはこのように見えます

@Aspect
public class LoggingInterceptor {
  private LogManager logManager;
  public void setLogManager(LogManager logManager) {
    this.logManager = logManager;
  }
  .....
} 

私のapplicationContext.xmlは次のようになります

<!--configures the AspectJ aspect and indicates which Spring context should be used when giving advice-->
<context:spring-configured />

<aop:aspectj-autoproxy/>

<!--<context:component-scan base-package="com.reverb" />-->

<bean id="loggingInterceptor" class="com.myapp.interceptor.LoggingInterceptor">
    <property name="logManager" ref="logManager" />
</bean>

logManagerは常にnullです...。

4

2 に答える 2

9

私はあなたlogManagerがどこにも定義されているとは思わない。そうである場合でも、@Aspectsは自動的に注入の対象にはなりません。実際には、2つのオブジェクトがあります。1つはタイプのBeanでLoggingInterceptorあり、もう1つは実際にAOPを処理するアスペクトです。しかし、その側面は豆ではありません。

これを機能させるには、を定義する必要がありfactory-method="aspectOf"ます<bean>詳細については、こちらをご覧ください。

于 2011-01-24T18:41:21.613 に答える
1

Java構成では、次のようになります。

@Configuration
@EnableSpringConfigured
public class AspectConfig {
}

次のことを忘れないでください。

  • @Configurable注釈を追加

アスペクトについて:

@Aspect
@Configurable
public class CounterAspect { 
    @Inject
    private CounterService counter;
    //...
} 
  • 'org.springframework:spring-aspects'コンパイル依存関係として追加

  • 追加META-INF/aop.xml

コンテンツ付き:

<!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd">
<aspectj>   
    <!-- add to debug: options="-showWeaveInfo -verbose -debug"-->
    <weaver>
        <include within="com..*"/>
    </weaver>    
    <aspects>
        <aspect name="com.your.package.CounterAspect"/>
    </aspects>    
</aspectj>
  • 次のようなものでjavaagentを有効にします-javaagent:/path-to-aspectj/aspectjweaver-1.8.10.jar
于 2017-10-06T12:17:27.997 に答える