網絡上關於Spring AOP的範例大都是使用xml做配置文件,見此特意寫一些JavaConfig的範例,既爲加深理解,亦爲增強記憶。如需引用或轉載的同窗,請註明來源。php
使用Spring AOP,要成功運行起代碼,只用Spring提供給開發者的jar包是不夠的,請額外上網下載兩個jar包導入項目中:html
因爲我使用IDEA_U建立的spring項目,aopalliance.jar是Maven自動下載的,而 aspectjweaver.jar 則須要另外下載aspectj.jar,而後用解壓軟件打開,解壓出 aspectjweaver.jarspring
先寫一個接口:網絡
@Component public interface Person { void say(); void run(); }
再寫兩個實現類:eclipse
@Component @Qualifier("adults") public class Adults implements Person { private String classname = "adults"; @Override public void say() { System.out.println("I am " + classname + " , I like acid rock."); } @Override public void run() { System.out.println("I am " + classname + " , I like long-distance"); } }
@Component @Qualifier("children") public class Children implements Person { private String classname = "children"; @Override public void say() { System.out.println("We are " + classname + " , we like nursery rhymes."); } @Override public void run() { System.out.println("We are " + classname + " , we like running around."); } }
而後寫一個切面,這也是一個類:ide
@Component @Aspect //聲明這是一個切面。必須的! public class AspectConfig { //通知和切入點的混合寫法; //第一個 * 號表示任意返回類型,第二個 * 號表示Person的全部方法 @Before("execution(* com.san.spring.aop.Person.*(..))") public void showTime1(){ System.out.println("CurrentTime = " + System.currentTimeMillis()); } @After("execution(* com.san.spring.aop.Person.*(..))") public void showTime2(){ System.out.println("CurrentTime = " + System.currentTimeMillis()); } }
上面的切面也能夠這樣定義測試
@Component @Aspect //聲明這是一個切面。必須的! public class AspectConfig { // 定義一個切點 @Pointcut("execution(* com.san.spring.aop.Person.*(..))") public void pointcut(){} // 定義通知 @Before("pointcut()") public void showTime1(){ System.out.println("CurrentTime = " + System.currentTimeMillis()); } // 定義通知 @After("pointcut()") public void showTime2(){ System.out.println("CurrentTime = " + System.currentTimeMillis()); } }
定義spring的JavaConfig類:spa
@Configuration @ComponentScan @EnableAspectJAutoProxy //啓用自動代理功能。必須的! public class SpringConfig { }
寫一個測試類:代理
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = SpringConfig.class) public class AopTest { @Autowired @Qualifier("children") private Person person; @Test public void testMethod(){ person.say(); person.run(); } }