你在项目中定义过aop吗
定义过,
aop他就是基于spring中的aop模块来实现的,通过定义切点和切面来把通用功能实现到多个业务方法中
aop他允许在不修改源代码的前提下,利用横切关注点的方式去实现通用功能,用索引定义切点和切面,能相对灵活的控制切面的应用范围和执行顺序而且aop来解耦业务逻辑和通用功能提高代码的可扩展性和维护性,比如说用aop来监视业务方法吧,能对这个看到执行时间,可以对数据进行监控和优化,利用在事务管理上可以确保一组要么全部成功要么全部回滚
通俗的讲:就是在一些代码中做重复操作的时候,我们为了实现代码的复用性,统一去处理这些工作,让后让我们得操作自然的嵌入(用自定义注解)到指定方法的指定位置
很多时候都要用到aop,当时做了一个员工管理系统,在增删改员工的时候 ,想把操作信息记录到数据库(操作人id,操作时间,操作类名,操作方法名等),但每一个方法上都实现太繁琐,所以我们就用了aop实现:
1.要先写一个切面类,在类上加上了Aspect跟Compoent注解因为这个切面类要被ioc容器管理2.因为方法操作时间太长,还要获取返回值,所以我们要用@Around环绕通知
3.因为要匹雪业务接口当中所有的增删攻的方法,但在方法在命名上没有共同的前缀或后缀。此时如果使用execution也可以,但是会比较繁琐,所以我们使用了 annotation表达式
1.自定义注解@MyLog 要加在方法上,生命周期是方法运行时所以我们加上了 @Target @Retention2.把所有的方法上都加上@MyLog 注解
3.在@Around所在方法,接一个MyLog参数然后在anntation后面直接指定MyLog4.最后往数据库插入的时候我们又设置一个异步处理,开启了一个新的线程,这就避免了如果我们往数据库存数据的时候如果出现了异常那么不会影响主程序的正常运行.