2017-01-23 3 views
5

私は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を追加することができました:

+0

をAspectJではなく、プロキシベースのSpring AOPを使用します。しかしおそらくそれはあなたがとにかく欲しいものです。 – kriegaex

+2

もちろん、それはうまくいかないでしょう...あなたは '@ Component'を削除します。アスペクトのインスタンスは作成されないので、使用できるアスペクトはありません。それを動作させるには(@A Beanメソッドとしてアスペクトを定義するために)@ Componentと@Aspectの両方が必要です。いずれにせよ、アスペクトのインスタンスは、それを動作させるためにそこに存在しなければならない。 –

答えて

1

は同じことに疑問を抱いて、私たちは次のような何かをやってしまいました。 これは無意味な返信だったかもしれませんが、問題の実際の解決策ではなく、問題の解決方法について説明しています。これを削除したい場合はお知らせください。

+0

これについては何も自動ではありません。アスペクトは '@ Bean'メソッドで作成されるので、新しいアスペクトを追加する場合は別のメソッドを追加する必要があります。 –

2

あなたは@EnableAspectJAutoProxyは、XMLベースの< AOPと同じものではありません

@Aspect/@Component注釈の春の構成や組み合わせのため@EnableAspectJAutoProxyの両方が必要になります。EnableAspectJAutoProxy` @ `でAspectJの-自動プロキシ>

関連する問題