1.导包
基础包:
commons-logging-1.1.jar
mysql-connector-java-5.1.29.jar
spring-aop-4.3.9.RELEASE.jar
spring-beans-4.3.9.RELEASE.jar
spring-context-4.3.9.RELEASE.jar
spring-core-4.3.9.RELEASE.jar
spring-expression-4.3.9.RELEASE.jar
面向spring切面编程的包:
spring-aspects-4.3.9.RELEASE.jar:(基础版的)
加强版的,不是spring官方带的,外部的。即使目标对象没有实现任何接口也能创建动态代理
com.springsource.net.sf.cglib-2.2.0.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
2.写配置
1)、将目标类和切面类(封装了通知方法(在目标方法执行前后执行的方法))加入到ioc容器中
这是目标类:
加入之后,写包扫描
添加切面类:
2)、加入切面类还不够,还应该告诉spring到底哪个是切面类:@Aspect
3)、告诉spring,切面类里的方法是何时何地运行(这里先删除掉 参数)
/**
*
* try {
@Before
method.invoke(obj,args)
@AfterReturning
}catch(e){
@AfterThrowing
}finally{
@After
}
* 告诉spring,切面类里的方法是何时何地运行
* 5个通知注解
* @Before在执行目标方法之前运行 前置通知
* @After在目标方法结束之后 后置通知
* @AfterReturning:在目标方法返回之后 返回通知
* @AfterThrowing:在目标方法抛出异常 异常通知
* @Around:环绕 环绕通知
*/
在执行目标方法之前运行**:写切入点表达式:execution(访问权限符 返回值类型 方法签名)**
4)、开启基于注解的AOP功能
会有小箭头!!!
测试:
public class AOPTest {
ApplicationContext ioc =new ClassPathXmlApplicationContext("applicationContext.xml");
@Test
public void test() {
//1、从ioc容器拿到目标对象;注意:如果想用类型,一定要用它的接口类型,不要用它本类
Calculator bean = ioc.getBean(Calculator.class);
bean.add(2,1);
}
}