spring框架详解(三)--AOP
2017-09-12 17:22
441 查看
一.什么是AOP
为了更好的对AOP的理解,可以这么抽象:
现实中你是一个大老板,你为了赚钱接了一个很大的工程,这些工程就是我们所编写的项目.但是这么大工程除了你的手下工人之外,当然最需要的是一个助理,这个助理就相当于AOP,它会随时向你报告工程情况,帮你工程监管,将你吩咐的事情全力做到.所以这个是很关键的.
二.切面 切点 通知
切面是横向的,就像之前举的例子,老板与助理的关系.一项工程要完成,需要一段时间才能完成,切面可以比喻助理每天要完成的任务,切点就更细化了就是每天完成任务的其中一项精确任务.通知就是在某个精确任务的时候所执行的动作.接到老板的通知.使用AOP必须导入的包:
spring 实现AOP不仅仅需要自己的jar包,还需要第三方的jar,分别是
aspectjrt.jar,
aspectjweaver.jar,
aopalliance-1.0.jar,
将这三个jar包放入项目中就可以spring的aop编程了
结合切面 切点 通知xml配置
<bean id="aopAspect" class="com.eduask.chp.aop.AopAspect"></bean>//aop切面 <bean id="project" class="com.eduask.chp.aop.Project"/>//项目类 <aop:config> <aop:aspect id="aopAspect" ref="aopAspect"> <aop:pointcut expression="execution(* com.eduask.chp.aop.*.*(..))" id="pointCutAop"/>//配置切点 <aop:before method="before" pointcut-ref="pointCutAop"/>//方法开始执行 <aop:after-returning method="afterReturning" pointcut-ref="pointCutAop"/>//返回结果后所执行 <aop:after-throwing method="afterThrowing" pointcut-ref="pointCutAop"/>//抛出异常所执行 <aop:after method="after" pointcut-ref="pointCutAop"/>//方法结束执行 </aop:aspect> </aop:config>
public class AopAspect { public void before() { System.out.println("方法开始前"); } public void afterReturning() { System.out.println("返回之后"); } public void afterThrowing() { System.out.println("抛出异常"); } public void after() { System.out.println("方法执行后"); }}
环绕通知
1.有参数
<aop:config> <aop:aspect id="aopAspect" ref="aopAspect"> <aop:pointcut expression="execution(* com.eduask.chp.aop.AopAspect.aroundInit(String,int)) and args(name,times)" id="pointCutAop"/> <aop:around method="around" pointcut-ref="pointCutAop"/> <aop:around method="aroundInit" pointcut-ref="pointCutAop"/> </aop:aspect> </aop:config>
public Object aroundInit(ProceedingJoinPoint pjp,String name,int times) { System.out.println(name+" "+times); Object object=null; try { System.out.println("around1"); object = pjp.proceed(); System.out.println("around2"); } catch (Throwable e) { // TODO Auto-generated catch block e.printStackTrace(); } return object; }
2.无参数
<aop:config> <aop:aspect id="aopAspect" ref="aopAspect"> <aop:pointcut expression="execution(* com.eduask.chp.aop.*.*(..))" id="pointCutAop"/> <aop:around method="around" pointcut-ref="pointCutAop"/> </aop:aspect> </aop:config>
public Object around(ProceedingJoinPoint pjp) { try { System.out.println("around1"); Object object = pjp.proceed(); System.out.println("around2"); } catch (Throwable e) { // TODO Auto-generated catch block e.printStackTrace(); } return pjp; }
三.introductions
<bean id="aopAspect" class="com.eduask.chp.aop.AopAspect"></bean> <bean id="project" class="com.eduask.chp.aop.Project"/> <aop:config> <aop:aspect id="aopAspect" ref="aopAspect"> <aop:declare-parents types-matching="com.eduask.chp.aop.*(+)" implement-interface="com.eduask.chp.aop.Fit" default-impl="com.eduask.chp.aop.FitImp"/> </aop:aspect> </aop:config>
解释说明:
types-matching中匹配到的对象,相当于会给此类添加一个父类,其中的该父类的接口为implement-interface,实现类为default-impl,这样得到bean的对象后强转为该接口对象
测试:Fit fit= (Fit) app.getBean(Project.class);
作用: 允许一个切面声明一个实现指定接口的通知对象,并且提供一个实现类代表这些对象
就像之前所说的助理可能需要一些帮手,这样才能更完整的完成项目
相关文章推荐
- Spring框架:AOP详解
- 详解Spring框架AOP(面向切面编程)
- Spring框架之IOC、AOP详解
- spring框架详解(四)--AOP代理
- spring框架详解(五)--AOP注解形式
- Spring框架的AOP/IOC/容器核心原理实例详解
- 深入浅出学习Spring框架(三):AOP 详解
- Spring框架IOC和AOP的实现原理与详解
- Spring3.0 AOP详解
- 详解AOP
- Spring框架AOP学习总结(一)
- Spring框架之AOP简析
- SPRING AOC、AOP 概念详解
- AOP概念详解笔记
- Spring框架学习笔记(7)——代理对象实现AOP
- spring框架之AOP-1
- Spring AOP切点表达式详解
- 09 Spring框架 AOP (二) 高级用法
- Spring框架汇总(Spring AOP——基于XML的简单案例)
- SSH中各个框架的作用以及Spring AOP,IOC,DI详解