每天分享一点Java知识(spring-aop)

1. 何为AOP

AOP:面向切面编程,相对于OOP面向对象编程。

Spring AOP存在的目的是为了解耦,AOP可以让一组类共享相同的行为,在OOP中只能通过继承类喝实现接口,来使代码的耦合度增强,且类继承只能为单继承,阻碍更多行为添加到一组类上,AOP弥补了OOP的不足。

2. AspectJ的注解式切面编程

a. 使用注解@Aspect声明是一个切面;

b. 使用注解@After、@Before、@Around等定义建言(advice),可直接将拦截规则(切点)作为参数;

c. 其中@After、@Before、@Around参数的拦截规则为切点(PointCut),为了使切点复用,可使用@PointCut专门定义拦截规则,然后在@After、@Before、@Around的参数中调用;

d. 其中符合条件的每一个被拦截处为连接点(JoinPoint)。

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

4. 代码示例:

a. 添加依赖

i. 添加Spring Aop支持以及AspectJ依赖

每天分享一点Java知识(spring-aop)

spring-aop依赖

<!--AspectJ依赖-->

每天分享一点Java知识(spring-aop)

AspectJ依赖

b. 编写拦截规则的实现

每天分享一点Java知识(spring-aop)

拦截规则注解

解释:注解本身是没有功能的,就和xml一样。注解和xml都是一种元数据,元数据即解释数据的数据,这就是所谓配置。注解的功能来自用这个注解的地方。

c. 编写使用注解的被拦截类

每天分享一点Java知识(spring-aop)

注解拦截类

d. 编写使用方法规则被拦截类

每天分享一点Java知识(spring-aop)

 

e. 编写切面

每天分享一点Java知识(spring-aop)

切面类

解释:

i. 通过@Aspect注解声明一个切面;

ii. 通过@Component让此切面成为Spring容器管理的Bean;

iii. 通过@PointCut注解声明切入点;

iv. 通过@After注解声明一个建言,并使用@PointCut定义的切点;

v. 通过反射可以获得注解上的属性,然后做日志记录相关的操作,下面的相同;

vi. 通过@Before注解声明一个建言,此建言直接使用拦截规则作为参数。

f. 配置类

每天分享一点Java知识(spring-aop)

注解配置

解释:使用@EnableAspectJAutoProxy注解开启Spring对AspectJ代理的支持。

g. 运行

每天分享一点Java知识(spring-aop)

运行测试

h. 结果

每天分享一点Java知识(spring-aop)

运行结果

5. 至此,便完成了Spring Aop的实现,相信大家对aop的理解也会更深一步。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值