一、AOP的作用
当多个方法中出现重复的代码时,一般会将其提取为新的方法,然后通过调用这个新的方法以此简化代码
而spring aop就是专门做这样的工作的
二、怎么使用AOP
1、创建项目
我们可以创建一个AOP类,并添加@Aspect注解,在此之前需要引包aspectjweaver-1.8.10.jar;在app.xml文件的Namespaces中勾选aop,配置aop:aspectj-autoproxy标签,作用是自动对应到有@Aspect注解所标识的类。
举个例子,创建一个javaweb项目,项目结构如下
在IoC容器创建的同时,ComputerAOP对象和ComputerService对象也随之初始化,aop:aspectj-autoproxy查找到ComputerAOP类创建代理类和代理对象,@Before中的语句可以自动为该类下所有返回值类型为public int的方法提供代理,我们打印出此时掌管该类的类名发现是代理类
若将注解注释掉,打印结果为本类名,说明这些方法没有被代理
2、观察@Before、@After、@AfterReturning、@AfterThrowing的应用场合
结果为
说明@Before对应于方法开始执行之前;@After对应于方法结束;@AfterThrowing对应于抛出异常后;@AfterReturning在出现异常时不执行。
将被除数改为1,运行结果如下
结论:@AfterReturning是在返回成功时调用;@After是在方法结束之后、执行return之前调用
3、@Around:可以代替前四种
并且ProceedingJoinPoint对象可以调用getTarget()方法,获得被代理的对象
执行结果
pjp对象还可以调用proceed()来调用原方法,如下图