码迷,mamicode.com
首页 > 其他好文 > 详细

AOP-xml

时间:2015-06-02 10:39:20      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

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>

 

AOP-xml

标签:

原文地址:http://www.cnblogs.com/jsnan/p/4545480.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!