2017-08-27 4 views
1
// Launcher.java 

    import com.rippleworks.spring.Macbeth; 
    import org.springframework.context.annotation.AnnotationConfigApplicationContext; 

    public class Launcher { 
     public static void main(String... args){ 
      AnnotationConfigApplicationContext context = 
        new AnnotationConfigApplicationContext(ProjectConfig.class); 
      Macbeth drama = context.getBean(Macbeth.class); 
      drama.perform(); 
      context.close(); 
     } 
    } 

// Macbeth.java 
package com.rippleworks.spring; 

import com.rippleworks.spring.interfaces.Performance; 
import org.springframework.stereotype.Component; 

@Component 
public class Macbeth implements Performance { 

    @Override 
    public void perform() { 
     System.out.println("Macbeth playing.."); 
    } 
} 


// Audience.java 

package com.rippleworks.spring; 

import org.aspectj.lang.annotation.Aspect; 
import org.aspectj.lang.annotation.Before; 
import org.aspectj.lang.annotation.Pointcut; 


@Aspect 
public class Audience { 

    @Pointcut("execution(* com.rippleworks.spring.Macbeth.perform(..))") 
    public void performance(){} 

    @Before("performance()") 
    public void silentCellphones() { 
     System.out.println("Cell phones are now silent."); 
    } 
} 


// ProjectConfig.java 

@Configuration 
@EnableAspectJAutoProxy 
@ComponentScan(basePackages = "com.rippleworks.spring") 
public class ProjectConfig { 
    // If I comment out this method, I wont get a NotSuchBeanDefExp 
    // for class Macbeth. Weird :-(
    @Bean 
    public Audience audience() { 
     return new Audience(); 
    } 
} 

こんにちは、AspectJスタイルAOPをSpring(IntelliJ IDEA Ultimate Version)で使用するのに問題があります。アスペクトを使用しない場合、出力は期待どおりです。 しかし、AspectクラスAudienceをBeanとして宣言すると、MacbethクラスのNoSuchBeanDefinitionExceptionが返されます。複数のBeanを宣言するときにNoSuchBeanDefinitionExceptionが発生する

2017年8月27日9時38分39秒AM org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh INFO: 起動日[日8月: org.spring[email protected]799f7e29を更新27 09:38:39 IST 2017];スレッド「メイン」 org.springframework.beans.factory.NoSuchBeanDefinitionExceptionのコンテキスト階層 例外のルート:「com.rippleworks.spring.Macbeth」利用可能 org.springframework.beans.factory.supportのタイプのノー 予選豆。 org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContextでDefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:353) でorg.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340) 。 java:1090) at Launcher.main(Launcher.java:10)

ありがとうございました。

+0

あなたは試してみて、 '@ Component'せずにあなたのマクベスを宣言し、代わりに' 'あなたのProjectConfig' – sfat

+0

でBean' @私はあまりにもことをしようとしたとして、それを初期化することができます。同じ例外。 –

+2

'@EnableAspectJAutoProxy(proxyTargetClass = true)'を試してください。これはaopと関係があり、インターフェースを持たない。 AOPは通常インターフェイス経由でやろうとしますが、Springは '@ EnableAspectJAutoproxy'を使うときも同じことをしようとします。 – sfat

答えて

0

アドバイスタイプで直接ポイントカットを提供しようとしています。 @beforeの中で直接あなたのポイントカット式を使って確認できますか?

@Before("execution(* com.rippleworks.spring.Macbeth.perform(..))") 
public void silentCellphones() { 
    System.out.println("Cell phones are now silent."); 
} 
関連する問題