AOP面向切面编程思想在spring中的实现

这篇是我跟着动力节点蓉姐学spring的时候做的笔记,如有不足求大佬勿喷

一、什么是AOP:

        AOP面向切面编程,抽象的专业定义这里我就不讲了我用下面的图具象的讲解一下:

如果把下面每个椭圆都看成一个业务,它是由很多部分组成的,总结来说可以分为两个部分:非业务代码(日志操作,资源释放,事务管理等)和主业务代码。我们用一把刀把椭圆切开让主业务和非业务切开,切开的那个切口就是切面,切开口两部分分开来写,最后把切口对接上,形成完整业务,实现解耦合。

        从代码上来讲就是把与主业务无关的高度复用的代码(日志信息,事务管理等)抽象出来,让业务与这些非业务代码分开来写,实现解耦合,最后通过绑定的方式生成一个代理对象,这个代理对象整合了业务逻辑与非业务逻辑共系统直接使用。


二、aspectj框架:

        spring中的一个AOP框架,使用spring开发时我们一般不用spring原生方式实现AOP,而是使用aspectj框架更高效和便捷。在pom中添加坐标即可使用


三、开发步骤:

  1. 编写业务类:按照正常的面向接口编程,先定义接口再写impl类实现
  2. 编写切面类:在类路径下新建包写切面类,在类生使用@Aspect注解标注这个类是切面类,类中的方法通过注解(@Before ,@After,@AfterReturning,@Arround ,@Pointcut标注切入的时间(是在主业务前通知还是主业务后通知还是环绕通知,最终通知,定义切入点),注解的参数是固定格式详情见图
  3. 在spring的配置文件中创建并绑定业务对象和切面对象:使用<aop:aspectj-autoproxy></aop:aspectj-autoproxy>标签一键绑定
  4. 通过getBean(“业务对象”);直接获得代理对象使用

四、通过改变切入点表达式来改变切面对象切入的范围

五、使用cjlib子类代理

        aspectJ默认是jdk动态代理,jdk动态代理返回的代理对象只能用接口类型来接收(接口实现类接收由于范围太小接不住代理类类型),如果我们想切换cglib动态代理用子类(接口实现类)来接住代理对象那么就要在spring的配置文件中的aop里手动切换:添加proxy-target-class=”true”属性

<aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy>

六、使用注解

        如果不想在spring配置文件中注册切面类了,我们可以通过在切面类上加@Component注解来注册,使用这种方法别忘了在配置文件中加入组件扫描器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值