标签:
public interface PersonDao { public void savePerson(); }
public class PersonDaoImpl implements PersonDao{ public void savePerson() { System.out.println("save person"); } }
public class Transaction { public void beginTransaction() { System.out.println("begin transaction"); } public void commit() { System.out.println("commit"); } }
/** * 原理: * 1、启动spring容器 * 2、把spring配置文件中的bean实例化 * 3、spring容器解析aop:config,就会解析切入点表达式, * 4、spring容器会把切入点表达式与spring容器内部的类作匹配,如果匹配成功,则 * 为该类创建代理对象,代理对象的方法体的形成过程就是通知+目标方法 * 如果切入点表达式与spring容器内部的类没有匹配成功,则报错 * 5、当在客户端利用context.getBean获取某一个对象时,如果有代理对象,则 * 返回代理对象,如果没有代理对象,则返回类的实例对象 * 说明: * spring容器会根据目标类有没有实现接口,自动产生代理对象 * 如果实现了接口,则用jdkproxy产生代理对象 * 如果没有实现接口,则用cglib产生代理对象 */ @Test public void test1(){ ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); PersonDao personDao = (PersonDao) context.getBean("personDao"); personDao.savePerson(); }
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> <!-- 导入命名空间 xmlns:aop="http://www.springframework.org/schema/aop" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd --> <!-- 导入目标类、切面 --> <bean id="personDao" class="com.sn.dao.PersonDaoImpl"></bean> <bean id="transaction" class="com.sn.dao.Transaction"></bean> <aop:config> <!-- expression 切入点表达式 定位哪些类要产生代理类 id 标示符 --> <aop:pointcut expression="execution(* com.sn.dao.PersonDaoImpl.*(..))" id="perform"/> <!-- aspect 切面 ref 指向切面类 --> <aop:aspect ref="transaction"> <!-- 前置通知 在目标方法执行之前 后置通知 在目标方法执行之后 pointcut-ref : 指向切入点 --> <aop:before method="beginTransaction" pointcut-ref="perform"/> <aop:after-returning method="commit" pointcut-ref="perform"/> </aop:aspect> </aop:config> </beans>
标签:
原文地址:http://www.cnblogs.com/jsnan/p/4545480.html