AOP Aspect Oriented Programming 面向切面编程。
spring的AOP的基于代理模式的,而且必须是IOC容器创建依赖对象。
你需要至少链接以下三个概念:
目标对象:(被代理的)
增强对象:(代理者)
切入点:(怎么样切?)
建议先去查看动态代理模式。这种做法的好处:是的我们在目标对象中可以专心做事,把共享问题统一在切面的增强中解决,将业务逻辑与系统逻辑分离开来。
如果你需要在spring中实现AOP哪里你需要以下步骤:
1:编写增强类
如前置增强,就让他实现MethodBeforeAdvice接口,并重写before方法。
如后置增强,就让他实现AfterReturningAdvice接口,并重写afterReturning方法。
2:在spring容器中创建bean对象
如果还要使用AOP,那么对象必须由spring容器创建。
3:植入切面
切面必须包括两个部分,切入点(什么时候切?如何切?切多少?)和增强。
因为切入是为了做事,在什么时候?做什么事?
示范:
1 2 3 4 5 6 7
| <!--织入切面配置--> <aop:config> <!--定义切入点 指定拦截方法--> <aop:pointcut id="pointcut" expression="execution(public int getSum(int,int))"></aop:pointcut> <!--指定增强对象--> <aop:advisor pointcut-ref="pointcut" advice-ref="myBeforeAdvice"></aop:advisor> </aop:config>
|
关于切入点的时机可以参考以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public int getSum(int,int) 表示方法名getSum带两个整型参数,返回为int
public int getSum(..) 表示方法名getSum带任意参数,返回的值int方法
* getSum(..) 表示方法名getSum带任意参数,任意返回值的方法
* *(..) 表示所有方法
* com.aop.MathTools.*(..) 表示MathTools类下的所有方法
* com.aop.*.*(..) 表示aop包下所有类的所有方法
* com.aop..*.*(..) 表示aop包下所有类级其子包下所类的所有方法,任意参数,任意返回值都切
|
最后,如果要实现上述功能需要的依赖是:
1 2 3 4 5
| <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>4.2.8.RELEASE</version> </dependency>
|