zoukankan      html  css  js  c++  java
  • 顾问封装通知

          通知(advice)是Spring中的一种比较简单的切面,只能将切面织入到目标类的所有方法中,而无法对指定方法进行增强

           顾问(advisor)是Spring提供的另外一种切面,可以织入到指定的方法中   接口 PointcutAdvisor

      实现类:

        NameMatchMethodPointcutAdvisor(名称匹配方法切入点顾问),

        RegexpMethodPointcutAdvice(正则匹配切入点顾问)

    一、名称匹配方法切入点顾问

      1.接口及其实现类

    public void doSome();
    public void doSome() {
            System.out.println("123");
        }

      2.增强类

     
    public class BeaforeAdvisor implements MethodBeforeAdvice {
        @Override
        public void before(Method method, Object[] objects, Object o) throws Throwable {
            System.out.println("前置==========");
        }
    }
     

      3.大配置文件

     
      
    <!--目标对象注入-->
    <bean id="proServiceimpl" class="cn.spring.advisor.ProServiceImpl"></bean> <!--增强类注入--> <bean id="beaforeAdvisor" class="cn.spring.advisor.BeaforeAdvisor"></bean> <!--顾问--> <bean id="advisor" class="org.springframework.aop.support.NameMatchMethodPointcutAdvisor" > <property name="advice" ref="beaforeAdvisor"></property> <property name="mappedNames" value="doSome"></property> </bean> <!--使用代理工厂--> <bean id="ProFactory" class="org.springframework.aop.framework.ProxyFactoryBean"> <property name="target" ref="proServiceimpl"></property> <property name="interceptorNames" value="advisor"></property> </bean>
     

    二、正则匹配的切入点顾问

     
    <!--目标对象注入-->
    <bean id="proServiceimpl" class="cn.spring.advisor.ProServiceImpl"></bean>
    <!--增强类注入-->
        <bean id="beaforeAdvisor" class="cn.spring.advisor.BeaforeAdvisor"></bean>
    <!--顾问-->
    <bean id="advisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor" >
            <property name="advice" ref="beaforeAdvisor"></property>
           <property name="pattern" value=".*do.*"></property>
        </bean>
    <!--使用代理工厂-->
        <bean id="ProFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
            <property name="target" ref="proServiceimpl"></property>
            <property name="interceptorNames" value="advisor"></property>
        </bean>

    三、顾问的自动代理

      顾问代理生成器,当我们声明好顾问后为目标对象生成代理对象。如果项目中 存在多个代理对象的话,需要实例化许多的ProxyFactoryBean,我们可以使用顾问代理生成器来解决这个问题。  

            顾问代理生成器主要分两种

    • 默认顾问代理生成器:DefaultAdvisorAutoProxyCreator
    • 名称顾问代理生成器:BeanNameAutoProxyCreator

      1.默认顾问自动代理生成器

     <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"></bean>

      2.名称顾问代理生成器

     
    <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <!--指定目标对象进行织入 多个对象用,分割--> <property name="beanNames" value="proServiceimpl,beanTest"></property>
    <!--指定顾问-->
         <property name="interceptorNames" value="advisor"></property> </bean>
  • 相关阅读:
    5款强大的Java Web开发工具
    [Visual Studio] 重置默认设置 还原默认设置
    [Visual Studio] VS2012调试时很慢的解决方案
    SQL 语句与性能之执行顺序
    SQL 语句与性能之联合查询和联合分类查询
    使用SHFB(Sandcastle Help File Builder)建立MSDN风格的代码文档
    循序渐进地代码重构
    博客收藏
    [已解决]:调用 LoadLibraryEx 失败,在 ISAPI 筛选器 "c:WindowsMicrosoft.NETFrameworkv4.0.30319\aspnet_filter.
    [Visual Studio] .vsix项目模板制作
  • 原文地址:https://www.cnblogs.com/danxun/p/11777973.html
Copyright © 2011-2022 走看看