今天是刘小爱自学Java的第124天。
感谢你的观看,谢谢你。
今天学习内容安排如下:
这种方式在现在的开发中基本不会使用,但为了更好地和AspectJ对比还是做一个了解。
1切面编程开发三步骤
①确定要增强的target对象
也就是哪些类需要增强?对spring来说,目标就是bean对象。
②配置增强
Advice通知,也就是我们要增强一个什么功能,会在②对应的类中说明。
③配置切入点
即要拦截的连接点有哪些(方法)
id=“myPointcut”:切入点唯一标识。
expression表达式:匹配方法的。
expression=bean(*Service)表示在spring容器中,所有id/name以Service结尾的bean都能被拦截。
④配置切面
也就是:要对哪些方法(pointcut),进行怎样的增强?(advice)
2编写传统aop的Advice通知类
①环绕通知
通知主要有四类,即增强的位置:
前置通知MethodBeforeAdvice:在目标方法执行前实施增强。
后置通知AfterReturningAdvice:在目标方法执行后实施增强。
环绕通知MethodInterceptor:在目标方法执行前后实施增强。
异常抛出通知ThrowsAdvice:在方法抛出异常后实施增强。
在这里因为我们需要在方法前后实施增强,所以我们使用环绕通知,需要实现对应接口。
注意:接口不要弄混淆了,是org.aoplliance中的接口,不是cglib中的。
②invoke方法
参数为Methodinvocation。
③调用目标对象的方法
这个就相当于method.invoke()。
④记录日志
这个涉及到日志配置文件的编写。
3使用spring的junit集成测试
①@RunWith注解和@ContextConfiguration注解
②@Autowired注解
通过@Autowired注解,注入需要测试的对象,在这里注意2点:
③调用测试方法完成测试
上述传统方法中需要实现对应的通知接口,而在Aspectj中就不需要了。
1Xml配置AOP开发方法还是三步:
而如何将它们对应起来就需要配置切面了。
①②③和传统的配置是一样的,不再赘述,只说不同的地方。
④配置切面
通知是有好几种的,重点也就是这个通知类型,将其弄懂了,xml和注解也就简单了:
method:通知类中的方法名;pointcut-ref=“myPointcut”:注入切入点。
2通知类的编写
因为测试方法和上述是差不多的,所以不再赘述,将测试结果放在一起说明:
配置文件中给指定方法设置通知的类型,beforeTest方法就是前置通知。
增强CustomerServiceImpl类中的所有方法,前置通知就相当于在对应方法之前执行增强的功能。
joinPoint就是连接点,在这里也就是目标对象中的所有方法,该参数是一个可选参数,其有三个常用的方法:
我这边只说明一下前置通知,其它的基本上都是大同小异的。
不过每个通知都有自己的应用场景,这个以后遇到具体的场景了再说明。
我会在以后做一个其对应的应用合集。
会了xml,注解就真心很简单了。
1配置xml文件
①配置注解扫描
②配置aspectj的自动代理机制
设置好这两个标签之后,就可以全部都使用注解配置AOP了
2通知类的编写
①确认目标对象
用注解将该类放入spring容器中。
②确认增强的功能
@Aspect注解即表示,将其作为aop管理。
③环绕通知
ProceedingJoinPoint是环绕通知中的一个参数,翻译过来就是可执行的连接点的意思。
通过该参数调用proceed()方法就相当于执行原目标对象中的方法。
④抛出通知
这个是如果出现了异常,就会执行该增强功能,也就相当于try…catch。
当然还有其它几种通知:
@Before前置通知,相当于BeforeAdvice。
@AfterReturning后置通知,相当于AfterReturningAdvice。
@After最终final通知,不管是否异常,该通知都会执行。
AOP这块的知识点有点生涩难懂,自己无论是学习效率还是笔记质量这块都下降了很多,这我也是能感受到的。
只能说目前来说所追求的还是一个学习进度,保证每天都有输出,至于质量问题只能留待以后一点点优化了。
谢谢你的观看。
如果可以的话,麻烦帮忙点个赞,谢谢你。