spring @ Aspect не вводит зависимости - PullRequest
1 голос
/ 24 января 2011

Я использую ткачество времени компиляции, используя 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 всегда нулевой ....

Ответы [ 2 ]

9 голосов
/ 24 января 2011

Я не вижу, чтобы ваш logManager был определен где-либо. Даже если это так, @Aspect s не имеют права на инъекцию автоматически. На самом деле, получается, что у вас есть 2 объекта - один является компонентом типа LoggingInterceptor, а другой - аспектом, который фактически обрабатывает AOP. Но аспект не боб.

Чтобы сделать это, вам нужно определить factory-method="aspectOf" для вашего <bean>. Подробнее см. Здесь .

0 голосов
/ 06 октября 2017

С настройкой 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
...