• Spring 通知和顾问进行增强


    使用顾问增加前置增强和后置增强

    <bean id="1" class="目标对象"></bean>

    <bean id="2" class="代理对象"></bean>

    <bean id="3" class="顾问">
    <property name="5" ref="代理对象id">
    <property name="6" value="匹配的规则">
    </bean>

    <bean id="4" class="代理工厂Bean">
    <property name="7" ref="目标对象">
    <property name="8" value="顾问id">
    </bean>

    前置增强:

    XML代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!--实现类(目标对象)-->
        <bean id="SSI" class="cn.Spring.Day16Advisor.ServiceSqlImpl"></bean>
        <!--增强类(代理对象)-->
        <bean id="MMBA" class="cn.Spring.Day16Advisor.MyMethodBeforeAdvice"></bean>
        <!--顾问-->
        <bean id="advisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
            <property name="advice" ref="MMBA"></property><!--传的是代理对象-->
            <property name="mappedNames" value="*s*"></property><!--匹配的方法-->
         </bean>
    
    
        <!--代理工厂Bean-->
        <bean id="MyProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
            <property name="target" ref="SSI"></property><!--接收目标对象-->
            <property name="interceptorNames" value="advisor"></property><!--然后把顾问拿进来-->
        </bean>
    </beans>

    测试方法代码:

    import cn.Spring.Day16Advisor.IServiceSql;
    import cn.Spring.Day16Advisor.ServiceSqlImpl;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Test20181124 {
        @Test
        public void test1(){
            ApplicationContext applicationContext=new ClassPathXmlApplicationContext("ApplicationAdvisor.xml");
            IServiceSql bean =(IServiceSql) applicationContext.getBean("MyProxy");//传入代理工厂Bean的id
            bean.delete();
            bean.insert();
            bean.select();
            bean.update();
        }
    }

    代理类:

     前置加后置增强:

    XML代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <!--实现类(目标对象)-->
        <bean id="SSI" class="cn.Spring.Day16Advisor.ServiceSqlImpl"></bean>
        <!--增强类(代理对象)-->
        <bean id="MMBA" class="cn.Spring.Day16Advisor.MyMethodBeforeAdvice"></bean>
        <!--顾问-->
        <bean id="advisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
            <property name="advice" ref="MMBA"></property><!--传的是代理对象-->
            <property name="mappedNames" value="*s*"></property><!--匹配的方法-->
         </bean>
    
        <!--增强类(代理对象)-->
        <bean id="MARA" class="cn.Spring.Day16Advisor.MyAfterReturningAdvice"></bean>
        <!--顾问-->
        <bean id="advisorT" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
            <property name="advice" ref="MARA"></property><!--传的是代理对象-->
            <property name="mappedNames" value="*s*"></property><!--匹配的方法-->
        </bean>
        <!--代理工厂Bean-->
        <bean id="MyProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
            <property name="target" ref="SSI"></property><!--接收目标对象-->
            <property name="interceptorNames" value="advisor,advisorT"></property><!--然后把顾问拿进来-->
        </bean>
    </beans>

    需要注意的是在代理工厂Bean中interceptorNames的value值要多个的话使用逗号隔开。

    结果:

  • 相关阅读:
    日志框架1---多种日志门面和日志实现初步了解(转载)
    @Autowired 与@Resource的区别(转)
    Spring 之jdbc模板(JdbcTemplate与NamedParameterJdbcTemplate)
    springMVC中的Controller里面定义全局变量
    spring批量更新数据 ---- BatchPreparedStatementSetter
    easyui树查找
    根据ID和parentID利用Java递归获取全路径名称
    一个统一将数据转换为JSON的方法
    上传图片并限制图片格式和大小
    js上传文件(图片)的格式和大小限制
  • 原文地址:https://www.cnblogs.com/java-263/p/10011336.html
Copyright © 2020-2023  润新知