spring框架详解(三)--AOP
来源:互联网 发布:域名注册ip查询 编辑:程序博客网 时间:2024/05/22 12:35
一.什么是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 blocke.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 blocke.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);
作用: 允许一个切面声明一个实现指定接口的通知对象,并且提供一个实现类代表这些对象
就像之前所说的助理可能需要一些帮手,这样才能更完整的完成项目
阅读全文
0 0
- spring框架详解(三)--AOP
- Spring框架 AOP(三)
- Spring框架:AOP详解
- 学习Spring框架系列(三):AOP 详解
- Spring框架内容整理(三):AOP
- Spring框架之IOC、AOP详解
- SSM框架spring Aop详解 No.3
- spring框架详解(四)--AOP代理
- spring框架详解(五)--AOP注解形式
- 深入浅出Spring(三) AOP详解
- 深入浅出Spring(三) AOP详解
- Spring复习(三)AOP详解
- Spring笔记(三):Aop详解
- Spring笔记(三):Aop详解
- Spring框架(二)整合Junit4、AOP开发、AOP事务管理详解
- Spring 框架参考文档(三)之Spring AOP APIs
- 【spring框架】(三)面向切面编程(AOP)
- Java三大框架之spring aop 配置错误一
- java.lang.IllegalArgumentException: Invalid character found in the request target.
- 【String】异常JSON字符串解析问题
- 百度地图在android中的使用
- jQuery对DOM元素的向下遍历
- 学习网站
- spring框架详解(三)--AOP
- struts2之多个文件上传
- P3772看电影(线段树+链表)
- nifi探索之处理器简介(2)
- #Android学习# 三种Notification的学习
- SVG学习链接
- 【opencv】显示中文汉字
- win10下安装双jdk并自由切换
- 一个Android Socket的例子---自己加了点东西