zoukankan      html  css  js  c++  java
  • Spring(十)--Advisor顾问

    SpringAdvisor顾问

    1. 创建新的xml文件  advisor.xml

    <!--01. 配置目标对象   实际肯定是配置UserServiceImpl-->
    <bean id="userDaoImpl" class="com.xdf.dao.UserDaoImpl"/>
    
    <!--02.配置前置通知-->
    <bean  id="beforeAdvice" class="com.xdf.advice.BeforeAdvice"/>
    
    
    
    <!--03.配置工厂-->
    <bean id="userProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--配置目标对象-->
        <property name="targetName" value="userDaoImpl"/>
        <!--配置顾问-->
        <property name="interceptorNames" value="myAdvisor"/>
    </bean>
    
    
    <!--04.配置顾问myAdvisor-->
    <bean id="myAdvisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor">
        <!--配置通知    通知只是顾问的一个属性  -->
        <property name="advice"  ref="beforeAdvice"/>
        <!--配置切入点-->
       <!-- <property name="mappedName" value="eat"/>-->
        <property name="mappedNames" value="eat,sleep"/>
    </bean>

    2. 创建测试类

    **
     *  使用顾问  advisor.xml
     */
    @Test //前置通知
    public void  testAdvisor(){
        ApplicationContext context=new ClassPathXmlApplicationContext("advisor.xml");
        UserDao userDao= context.getBean("userProxy",UserDao.class);
        userDao.eat();
        userDao.sleep();
    }

    ·可以解决 给指定的主业务方法 增强的问题!

    3. 使用正则匹配,创建新的xml文件

        在Dao层增加 ea()和e()!便于我们测试

    <!--01. 配置目标对象   实际肯定是配置UserServiceImpl-->
    <bean id="userDaoImpl" class="com.xdf.dao.UserDaoImpl"/>
    
    <!--02.配置前置通知-->
    <bean  id="beforeAdvice" class="com.xdf.advice.BeforeAdvice"/>
    
    
    
    <!--03.配置工厂-->
    <bean id="userProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
        <!--配置目标对象-->
        <property name="targetName" value="userDaoImpl"/>
        <!--配置顾问-->
        <property name="interceptorNames" value="myAdvisor"/>
    </bean>
    
    
    <!--04.配置顾问myAdvisor  RegexpMethodPointcutAdvisor -->
    <bean id="myAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <!--配置通知    通知只是顾问的一个属性  -->
        <property name="advice"  ref="beforeAdvice"/>
        <!--配置切入点  使用正则表达式
          com.xdf.dao.UserDaoImpl.eat  务必使用类名+方法名
          . 代表任意单个字符
          * 代表.字符出现的次数是0-N
          ?:0 -1
          +: 1-N
         -->
        <property name="patterns">
            <array>
               <!--  <value>.*e.*</value>  匹配 eat 和sleep-->
                <!--  <value>com.xdf.dao.UserDaoImpl.ea.?</value>匹配 eat 和ea-->
                 <value>com.xdf.dao.UserDaoImpl.*e.*</value> <!--匹配 eat 和ea  e-->
            </array>
        </property>

    </bean>
    <!--还是一个问题没解决    一个工厂只能操作一个对象-->

    4. 创建测试类

    /**
     *  使用顾问  regex.xml
     */
    @Test //前置通知
    public void  testRegex(){
        ApplicationContext context=new ClassPathXmlApplicationContext("regex.xml");
        UserDao userDao= context.getBean("userProxy",UserDao.class);
        userDao.eat();
        userDao.ea();
        userDao.e();
        userDao.sleep();
    }

        各位亲,这个办法你想到了吗?!接下来的我还会继续更新的哦!

  • 相关阅读:
    systemctl启动服务时,配置日志输出控制
    HTML5实现大文件分片上传示例
    HTML5实现大文件分片上传实例
    HTML5实现大文件分片上传代码
    HTML5实现大文件分片上传源代码
    HTML5实现大文件分片上传源码
    如何将word内容粘贴到富文本编辑器里面
    UEditor可以如何直接复制word的图文内容到编辑器中
    WORD 图片能粘到百度编辑器吗
    Word文档粘贴到DEDECMS
  • 原文地址:https://www.cnblogs.com/fl72/p/9655828.html
Copyright © 2011-2022 走看看