国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JSP > 正文

Spring 自動(dòng)代理創(chuàng)建器詳細(xì)介紹及簡(jiǎn)單實(shí)例

2024-09-05 00:22:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Spring 自動(dòng)代理創(chuàng)建器

前言:

在經(jīng)典的spring Aop中,可以手工為目標(biāo)Bean創(chuàng)建代理Bean,配置文件必須為每一個(gè)需要增強(qiáng)的Bean聲明一個(gè)代理,結(jié)果配置文件里聲明了大量的代理Bean。

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

接口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(); } 

目標(biāo)類:

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">   <!-- 定義目標(biāo)對(duì)象 -->   <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>     <!-- 定義切入點(diǎn) -->   <bean id="methodNamePointcut"    class="org.springframework.aop.support.NameMatchMethodPointcut">    <property name="mappedNames">     <list>      <value>eat</value>      <value>read</value>     </list>    </property>   </bean>     <!-- 定義后置增強(qiáng)器(關(guān)聯(lián)通知和切入點(diǎn)) -->   <bean id="AfterMethodNameAdvisor"    class="org.springframework.aop.support.DefaultPointcutAdvisor">    <property name="advice" ref="afterAdvice"></property>    <property name="pointcut" ref="methodNamePointcut"></property>   </bean>   <!-- 定義前置增強(qiáng)器(關(guān)聯(lián)通知和切入點(diǎn)) -->   <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>     <!-- 定義自動(dòng)代理創(chuàng)建器 -->   <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> 

以上自動(dòng)代理器可以為以human結(jié)尾的Bean創(chuàng)建代理。

測(cè)試:

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還提供了另一個(gè)自動(dòng)代理創(chuàng)建器:DefaultAdvisorAutoProxyCreator。這個(gè)自動(dòng)代理創(chuàng)建器不需要任何配置,他會(huì)自動(dòng)檢查Ioc容器里聲明的每一個(gè)增強(qiáng)器和Bean。如果存在與增強(qiáng)器切入點(diǎn)匹配的的Bean,那么DefaultAdvisorAutoProxyCreator將自動(dòng)為其創(chuàng)建代理。

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

需要注意的是,DefaultAdvisorAutoProxyCreator可能會(huì)代理那些不希望被代理的目標(biāo)Bean,所以使用時(shí)要格外小心。

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


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JSP教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 犍为县| 明水县| 乌鲁木齐县| 万载县| 府谷县| 祁门县| 松滋市| 新巴尔虎左旗| 襄樊市| 乡宁县| 尼玛县| 南汇区| 洪泽县| 都昌县| 全南县| 正镶白旗| 安国市| 文登市| 彰化市| 庄浪县| 巫溪县| 文登市| 台中市| 华坪县| 上饶市| 贵阳市| 永济市| 昭觉县| 垫江县| 蒙阴县| 湖北省| 怀宁县| 扶沟县| 青川县| 元谋县| 德昌县| 兴和县| 永州市| 新营市| 木兰县| 韶山市|