1.3—Spring基础配置—3.AOP

1.点睛:
AOP:面向切面编程,相对于OOP面向对象编程。
Spring的AOP的存在目的是为了解耦。AOP可以让一组类共享相同的行为。在OOP中只能通过继承类和实现接口,来使代码的耦合度增强,AOP弥补了OOP的不足。
Spring支持AspectJ的注解式切面编程。
(1)使用@AspectJ声明是一个切面。
(2)使用@After、@Before、@Around定义建言(advice),可直接将拦截规则(切点)作为参数。
(3)其中@After、@Before、@Around参数的拦截规则为切点(PointCut),为了使切点复用,可使用@PointCut专门定义拦截规则,然后在@After、@Before、@Around的参数中调用。
(4)其中符合条件的每一个被拦截处为连接点(JointPoint)

示例将演示基于注解拦截和基于方法规则拦截两种方式,演示一种模拟记录操作的日志系统的实现。其中注解式拦截能够很好地控制要拦截的粒度和获得更丰富的信息,Spring本身在事务处理(@Transcational)和数据缓存(@Cacheable等)上面都使用此种形式的拦截。

2.示例
(1)添加Spring aop支持及AspectJ依赖
1.3—Spring基础配置—3.AOP
(2)编写拦截规则的注解
1.3—Spring基础配置—3.AOP
注解本身是没有功能的,就和xml一样。注解和xml都是一种元数据,元数据即解释数据的数据,这就是所谓配置。
注解的功能来自用这个注解的地方。
(3)编写使用注解的被拦截类
1.3—Spring基础配置—3.AOP
(4)编写使用方法规则被拦截类
1.3—Spring基础配置—3.AOP
(5)编写切面
1.3—Spring基础配置—3.AOP
通过@Aspect注解声明一个切面
通过@Component让此切面成为Spring容器管理的Bean
通过@PointCut注解声明切点
通过@After注解声明一个建言,并使用@PointCut定义的切点
通过反射可获得注解上的属性,然后做日志记录相关的操作,下面的相同
通过@Before注解声明一个建言,此建言直接使用拦截规则作为参数
(6)配置类
1.3—Spring基础配置—3.AOP
使用@EnableAspectJAutoProxy注解开启Spring对AspectJ的支持
(7)运行
1.3—Spring基础配置—3.AOP
结果:
1.3—Spring基础配置—3.AOP

上一篇:使用Nginx反向代理 让IIS和Tomcat等多个站点一起飞


下一篇:Spring_总结_04_高级配置(一)之Profile