Spring框架总结(十)
XML方式实现AOP编程
Xml实现aop编程:
1) 引入jar文件 【aop 相关jar, 4个】
2) 引入aop名称空间
3)aop 配置
* 配置切面类 (重复执行代码形成的类)
* aop配置 拦截哪些方法 / 拦截到方法后应用通知代码
把下边中的类的所有注释去掉
Spring框架总结(九) - 北极的大企鹅 - 博客园 http://www.cnblogs.com/liuyangfirst/p/6556121.html
更改bean.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd 11 http://www.springframework.org/schema/aop 12 http://www.springframework.org/schema/aop/spring-aop.xsd"> 13 14 <!-- dao 实例 --> 15 <bean id="myUserDaoAop" class="com.liuyang.xml.proxy.MyUserDaoAop"></bean> 16 <bean id="orderDao" class="com.liuyang.xml.proxy.OrderDao"></bean> 17 18 <!-- 切面类 --> 19 <bean id="aop" class="com.liuyang.xml.proxy.Aop"></bean> 20 21 <!-- Aop配置 --> 22 <aop:config> 23 <!-- 定义一个切入点表达式: 拦截哪些方法 --> 24 <aop:pointcut expression="execution(* com.liuyang.xml.proxy.*.*(..))" 25 id="pt" /> 26 <!-- 切面 --> 27 <aop:aspect ref="aop"> 28 <!-- 环绕通知 --> 29 <aop:around method="around" pointcut-ref="pt" /> 30 <!-- 前置通知: 在目标方法调用前执行 --> 31 <aop:before method="begin" pointcut-ref="pt" /> 32 <!-- 后置通知: --> 33 <aop:after method="after" pointcut-ref="pt" /> 34 <!-- 返回后通知 --> 35 <aop:after-returning method="afterReturning" 36 pointcut-ref="pt" /> 37 <!-- 异常通知 --> 38 <aop:after-throwing method="afterThrowing" 39 pointcut-ref="pt" /> 40 41 </aop:aspect> 42 </aop:config> 43 </beans>
更改test
1 public class TestAop { 2 3 ApplicationContext ac = new ClassPathXmlApplicationContext( 4 "com/liuyang/xml/proxy/bean.xml"); 5 6 // 目标对象有实现接口,spring会自动选择“JDK代理” 7 @Test 8 public void testApp() { 9 UserDao userDao = (UserDao) ac.getBean("myUserDaoAop"); 10 System.out.println(userDao.getClass());// $Proxy001 11 userDao.save(); 12 } 13 14 // 目标对象没有实现接口, spring会用“cglib代理” 15 @Test 16 public void testCglib() { 17 OrderDao orderDao = (OrderDao) ac.getBean("orderDao"); 18 System.out.println(orderDao.getClass()); 19 orderDao.save(); 20 } 21 }
十年磨一剑,一剑破万法