Spring--Advisor顾问

Posted 倾城月光﹋淡如水

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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();
}

 

 

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

 

以上是关于Spring--Advisor顾问的主要内容,如果未能解决你的问题,请参考以下文章

翻译Ext JS升级顾问1.0发布

Spring笔记07(Spring AOP的通知advice和顾问advisor)

SAP PP顾问面试题及资料

Access 2007 未绑定控制在一个记录中更改对所有其他记录的影响

sap实施顾问基本职责

SAP咨询顾问的问题