Я устанавливаю новое приложение Spring (не весеннюю загрузку) в IDEA и загружаю вручную aspectjweaver, пишу следующий код на практике.
Корневой класс конфигурации:
@Configuration
/*@EnableAspectJAutoProxy*/
@ComponentScan
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext();
ctx.register(Main.class);
ctx.refresh();
Performance performance=ctx.getBean(WoodStock.class);
//System.out.println(ctx.getBean(Audience.class));
performance.performance();
}
}
и компоновка проекта:
+com.dawn.www
-Main.java
+aspect
-Audience.java
+music
-Performance.java
-WoodStock.java
Я хочу, чтобы Audience
был аспектом WoodStock
(увидим это весной в действии)
@Aspect
@Component
public class Audience {
@Before("execution(* com.dawn.www.music.Performance.performance(..))")
public void silenceCellPhones(){
System.out.println("-----------Silencing cell phones");
}
}
Performance
простой интерфейс, который реализует WoodStock
public interface Performance {
void performance();
}
@Component
public class WoodStock implements Performance{
@Override
public void performance() {
System.out.println("WoodStock Performance start,singer singing+++++");
}
}
@ComponentScan
должен найти бин WoodStock
, который определен в контексте приложения, однако, когда я его запускаю:
No qualifying bean of type 'com.dawn.www.music.WoodStock' available
но когда я закомментирую @EnableAspectJAutoProxy
, WoodStock можно получить из контекста приложения?