【Spring四】AOP之XML配置
发布时间:2020-12-16 06:13:53 所属栏目:百科 来源:网络整理
导读:AOP:Aspect Oriented Programming 面向切面编程 面向切面编程的核心是动态代理设计模式。请先参见动态代理设计模式笔记。 以Hibernate保存一个对象到数据库为例,由于保存数据时需要开启事务,利用面向切面编程思想,将事务的处理分离出来,当作一个切面来处
AOP:Aspect Oriented Programming 面向切面编程
面向切面编程的核心是动态代理设计模式。请先参见动态代理设计模式笔记。
以Hibernate保存一个对象到数据库为例,由于保存数据时需要开启事务,利用面向切面编程思想,将事务的处理分离出来,当作一个切面来处理。
jdk的动态代理的缺点:
1、在拦截器中,切入点的判断是非常复杂的 2、虽然实现了切面与目标类的松耦合,但是在拦截器中还得实现结合过程
一.springAOP的原理:
目标类:在目标类的方法调用的前后,我们需要加入自己的逻辑;
切面:包含了所有的封装了自己的逻辑方法的类
切入点:目标类里的需要加入额外逻辑的方法;
通知:切面里的自己的封装自己的逻辑的方法;
比如Hibernate中,目标类是XDaoImpl,切入点是XDao.save(xx)方法,通知是开启事务,以及commit,切面就是封装了开启事务和commit的类;即在save方法执行前,需要开始事务,执行后,需要提交事务!
1、当启动spring容器的时候,
2、解析<aop:config>便签 (1)、解析切入点表达式<aop:pointcut>,切入点针对的是函数,从函数进行切入,把表达式解除出来以后和 spring中的bean进行匹配 (2)、如果匹配成功,则为该bean创建代理对象,在创建代理对象的过程中,把目标方法和通知结合在一起了 如果匹配不成功,则直接报错 (3)、当客户端调用context.getBean时,获取到的 (1)、如果该对象有代理对象,则返回代理对象 (2)、如果该对象没有代理对象,则返回对象本身 3、<aop:aspect>切面标签:
在切面中配置各种通知,这些通知就我们自己需要额外执行的逻辑,有的逻辑在切入点函数执行前执行,用<aop:before>配置;有的需要在切入点方法执行之后执行,使用<aop:after>配置;还有的是执行切入点函数出现异常后执行,等的。。
说明: spring容器内部会自动判断: 如果目标类实现了接口,则采用jdkproxy 如果目标类没有实现接口,则采用cglibproxy
二.关于通知(通知就是切面里的方法,又称Advive,是在方法执行前和后需要执行的自己的代码)
前置通知:
1、在目标方法之前执行 2、无论目标方法遇到异常都执行 后置通知: 1、在目标方法之后执行 2、如果目标方法遇到异常,则不执行 3、可以获取连接点的一些信息 最终通知: 1、相当于finally 2、无论目标方法是否遇到异常,都执行 异常通知 1、获取目标方法抛出的异常信息 2、throwing参数的配置才能获取信息 环绕通知 相当于jdkproxy的invoke方法
三.下面使用Spring的AOP来处理Hibernate保存对象。
1.配置文件:applicationContext.xml
关于切入点表达式:切入点表达式匹配的是方法,一个方法的完整声明为:
问号代表可有可无,没有问号代表一定要有!
下面是一个方法完整声明的示例:
切入点表达式示例:
2.java代码:
四.多切面的例子
假如查看工资需要经过日志管理,安全管理,权限管理后才能查看工资。
目标类:查看工资的类
切面:日志管理,安全管理,权限管理
切入点:查看工资的方法
1.java代码:
2.配置文件:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |