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 }
posted @ 2017-03-15 20:50  北极的大企鹅  阅读(146)  评论(0编辑  收藏  举报
阅读 - 79万