私はSpring Bootを使用しています。私はそれを使ってAspectJを使いたいと思います。@EnableAspectJAutoProxyが動作しません
(もちろん)、次の作品:
@Aspect @Component public class RequestMappingAspect { @Before("@annotation(org.springframework.web.bind.annotation.RequestMapping)") public void advice(JoinPoint joinPoint) { ... } }
@Component
が削除され、@EnableAspectJAutoProxy
が追加された場合は、次のように動作しません。
@SpringBootApplication @EnableSwagger2 @EnableAspectJAutoProxy public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
AspectJ自動プロキシを正しく有効にする方法はありますか?
@EnableAspectJAutoProxy(proxyTargetClass = true)
@Configuration("Main applicationContext")
@ComponentScan(
basePackages = {"com.where.ever"},
excludeFilters = {@ComponentScan.Filter(Aspect.class)})
public class ApplicationConfiguration {
@Bean(autowire = Autowire.BY_TYPE)
public SomeAspect someAspect() {
return Aspects.aspectOf(SomeAspect.class);
}
...
...
}
これはちょうどまたそれらを正しく有線側面、上@Aspect
-annotationを追加することができました:
をAspectJではなく、プロキシベースのSpring AOPを使用します。しかしおそらくそれはあなたがとにかく欲しいものです。 – kriegaex
もちろん、それはうまくいかないでしょう...あなたは '@ Component'を削除します。アスペクトのインスタンスは作成されないので、使用できるアスペクトはありません。それを動作させるには(@A Beanメソッドとしてアスペクトを定義するために)@ Componentと@Aspectの両方が必要です。いずれにせよ、アスペクトのインスタンスは、それを動作させるためにそこに存在しなければならない。 –