1、定义:
AOP(Aspect Oriented Programming)面向切面编程:基于OOP基础之上的新的编程思想,是指在程序运行期间,将某段代码动态的切入到指定方法的指定位置进行运行的编程方式。
2、开发步骤:
导包
- spring-beans-4.0.0.RELEASE.jar
- spring-aop-4.0.0.RELEASE.jar
- spring-context-4.0.0.RELEASE.jar
- spring-core-4.0.0.RELEASE.jar
- spring-expression-4.0.0.RELEASE.jar
- commons-logging-1.1.3.jar
- spring-aspects-4.0.0.RELEASE.jar
写配置
1、将目标类和切面类(封装了通知方法(在目标方法执行前后执行的方法))通过@Component加入到ioc容器中;
2、通过加@Aspect注解告诉Spring哪个是切面类;
3、通过加注解的方式告诉Spring切面类中的每一个方法是什么时候运行;
- @Before:在目标方法运行之前执行,称为前置通知;
- @After:在目标方法运行结束之后执行,称为后置通知;
- @AfterReturning:在目标方法正常返回之后执行,称为返回通知;
- @AfterThrowing:在目标方法抛出异常之后执行,称为异常通知;
- @Around:环绕,称为环绕通知。
注:此时并不知道具体是哪个方法,需要在注解内部加入切入点表达式execution(访问权限符 返回值类型 方法全类名),例如:@Before("public int execution(方法的全类名)")。
4、需要在配置文件中加入<aop:aspectj-autoproxy></aop:aspectj-autoproxy>来开启基于注解的AOP模式。
测试
从ioc容器中拿到目标对象,一定要用它的接口类型,不要用本类。AOP的底层就是动态代理,容器中保存的组件是它的代理对象,不是本类的类型。