以下均在lin包中
其核心是利用代理模式,在执行目标方法时,通过配置切面类,会执行相应的方法
public interface Teacher{
public void perform();
}
接口实现类
//实现类,配置为组件
@Component("serviceImpl")
public class Instrumentalist implements Teacher{
public void perform() {
System.out.println("执行");
}
}
切面类:注意execution的配置
@Component
@Aspect
public class Student {
//切入点配置
@Pointcut("execution(* lin.Instrumentalist.perform(..))")
public void performance(){}
@Before("performance()")
public void takeSeats(){
System.out.println("切入前");
}
@Before("performance()")
public void turnOffCellphones(){
System.out.println("回调");
}
@AfterReturning("performance()")
public void applaud(){
System.out.println("暂停时");
}
@AfterThrowing("performance()")
public void demandRefund(){
System.out.println("异常");
}
@After("performance()")
public void after(){
System.out.println("最终执行");
}
}
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="lin"></context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
</beans>
测试类
public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Teacher performer = (Teacher)ctx.getBean("serviceImpl");
performer.perform();
}
}