麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JSP > 正文

Spring 自動代理創建器詳細介紹及簡單實例

2024-09-05 00:22:51
字體:
來源:轉載
供稿:網友

Spring 自動代理創建器

前言:

在經典的spring Aop中,可以手工為目標Bean創建代理Bean,配置文件必須為每一個需要增強的Bean聲明一個代理,結果配置文件里聲明了大量的代理Bean。

在經典的Spring Aop中,Spring提供了自動代理創建器(Aotu proxy creator),有了自動代理創建器,就不再需要使用ProxyFactoryBean手工地創建代理了。

接口Animal和Book:

 package com.zzj.aop;  public interface Animal {  public void eat();  public void drink(); } 
package com.zzj.aop;  public interface Book {  public void read(); } 

目標類:

package com.zzj.aop;  public class Human implements Animal, Book{  @Override  public void eat() {   System.out.println("eat...");  }   @Override  public void drink() {   System.out.println("drink...");  }   @Override  public void read() {   System.out.println("read...");  } } 

前置通知和后置通知:

package com.zzj.aop;  import java.lang.reflect.Method;  import org.springframework.aop.MethodBeforeAdvice;  public class MethodBefore implements MethodBeforeAdvice {   public void before(Method arg0, Object[] arg1, Object arg2)    throws Throwable {   System.out.println("before " + arg0.getName());  }  } 
package com.zzj.aop;  import java.lang.reflect.Method;  import org.springframework.aop.AfterReturningAdvice;  public class MethodAfter implements AfterReturningAdvice {   public void afterReturning(Object arg0, Method arg1, Object[] arg2,    Object arg3) throws Throwable {   System.out.println( "after " + arg1.getName());  }  } 

Spring配置文件:

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"   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.xsd">   <!-- 定義目標對象 -->   <bean id="human" class="com.zzj.aop.Human"></bean>     <!-- 定義通知 -->   <bean id="beforeAdvice" class="com.zzj.aop.MethodBefore"></bean>   <bean id="afterAdvice" class="com.zzj.aop.MethodAfter"></bean>     <!-- 定義切入點 -->   <bean id="methodNamePointcut"    class="org.springframework.aop.support.NameMatchMethodPointcut">    <property name="mappedNames">     <list>      <value>eat</value>      <value>read</value>     </list>    </property>   </bean>     <!-- 定義后置增強器(關聯通知和切入點) -->   <bean id="AfterMethodNameAdvisor"    class="org.springframework.aop.support.DefaultPointcutAdvisor">    <property name="advice" ref="afterAdvice"></property>    <property name="pointcut" ref="methodNamePointcut"></property>   </bean>   <!-- 定義前置增強器(關聯通知和切入點) -->   <bean id="BeforeMethodNameAdvisor"    class="org.springframework.aop.aspectj.AspectJExpressionPointcutAdvisor">    <property name="advice" ref="beforeAdvice"></property>    <property name="expression">     <value>execution(* *.*in*(..))</value><!-- 可匹配drink -->    </property>   </bean>     <!-- 定義自動代理創建器 -->   <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">    <property name="beanNames">     <list>      <value>*human</value>     </list>    </property>    <property name="interceptorNames">     <list>      <value>AfterMethodNameAdvisor</value>      <value>BeforeMethodNameAdvisor</value>     </list>    </property>   </bean> </beans> 

以上自動代理器可以為以human結尾的Bean創建代理。

測試:

package com.zzj.aop;  import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;  public class Test {   /**   * @param args   */  public static void main(String[] args) {   ApplicationContext context = new ClassPathXmlApplicationContext(     "applicationContext.xml");   Animal animal = (Animal) context.getBean("human");   Book book = (Book) animal;   animal.eat();   animal.drink();   book.read();   }  } 

輸出:

eat... after eat before drink drink... read... after read 

Spring還提供了另一個自動代理創建器:DefaultAdvisorAutoProxyCreator。這個自動代理創建器不需要任何配置,他會自動檢查Ioc容器里聲明的每一個增強器和Bean。如果存在與增強器切入點匹配的的Bean,那么DefaultAdvisorAutoProxyCreator將自動為其創建代理。

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

需要注意的是,DefaultAdvisorAutoProxyCreator可能會代理那些不希望被代理的目標Bean,所以使用時要格外小心。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到JSP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久精品日韩一区 | 羞羞的动漫在线观看 | 91av资源在线 | 国产免费观看a大片的网站 欧美成人一级 | 日本在线免费观看 | 在线区 | 手机免费看一级片 | 久久久久久久免费看 | 精品国产一区二区三区久久久蜜月 | 91热久久免费频精品黑人99 | 国产亚洲精品久久久久婷婷瑜伽 | 成人毛片100部免费观看 | 在线a | 黄色影院 | 欧美极品免费 | 亚洲成人在线视频网 | 极品美女一级毛片 | 国产精品视频六区 | 免费高清一级欧美片在线观看 | 久久爽久久爽久久av东京爽 | 国产无限资源在线观看 | 成年人毛片视频 | 一区二区三区小视频 | 久久影城 | 男女做性免费网站 | 精品av在线播放 | 国产精品99精品 | 久成人| 久久精品日韩一区 | 午夜国产福利 | 99国产精品国产免费观看 | 精品一区二区三区日本 | 国产乱淫av一区二区三区 | 羞羞网站在线观看入口免费 | 性爱视频免费 | 一级做a在线观看 | 多男操一女视频 | 国产理论视频在线观看 | 国产午夜探花 | 播色网 | 中国av免费在线观看 |