// 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)
ありがとうございました。
あなたは試してみて、 '@ Component'せずにあなたのマクベスを宣言し、代わりに' 'あなたのProjectConfig' – sfat
でBean' @私はあまりにもことをしようとしたとして、それを初期化することができます。同じ例外。 –
'@EnableAspectJAutoProxy(proxyTargetClass = true)'を試してください。これはaopと関係があり、インターフェースを持たない。 AOPは通常インターフェイス経由でやろうとしますが、Springは '@ EnableAspectJAutoproxy'を使うときも同じことをしようとします。 – sfat