全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Spring 自动代理创建器详细介绍及简单实例

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,所以使用时要格外小心。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Spring  # 自动代理创建器  # Spring自动代理创建器详细介绍  # 自动代理创建器实例代码  # 详解在Spring中如何自动创建代理  # Springboot源码 AbstractAdvisorAutoProxyCreator解析  # Spring-AOP自动创建代理之BeanNameAutoProxyCreator实例  # 配置文件  # 的是  # 他会  # 希望能  # 为其  # 谢谢大家  # 在与  # 时要  # 需要注意  # 不需要任何  # 容器里  # MethodBefore  # springframework  # MethodBeforeAdvice  # Object  # import  # println  # System  # lang  # org 


相关文章: 已有域名和空间如何快速搭建网站?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  完全自定义免费建站平台:主题模板在线生成一站式服务  如何制作网站标识牌,动态网站如何制作(教程)?  如何在IIS中新建站点并配置端口与IP地址?  如何快速登录WAP自助建站平台?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  建站主机类型有哪些?如何正确选型  如何高效利用亚马逊云主机搭建企业网站?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  如何在西部数码注册域名并快速搭建网站?  金*站制作公司有哪些,金华教育集团官网?  建站之星导航菜单设置与功能模块配置全攻略  沈阳制作网站公司排名,沈阳装饰协会官方网站?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  在线教育网站制作平台,山西立德教育官网?  如何选择最佳自助建站系统?快速指南解析优劣  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  PHP正则匹配日期和时间(时间戳转换)的实例代码  网站网页制作专业公司,怎样制作自己的网页?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  宁波自助建站系统如何快速打造专业企业网站?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  如何快速完成中国万网建站详细流程?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  建站主机无法访问?如何排查域名与服务器问题  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  海南网站制作公司有哪些,海口网是哪家的?  高防服务器租用指南:配置选择与快速部署攻略  如何用狗爹虚拟主机快速搭建网站?  如何制作算命网站,怎么注册算命网站?  定制建站流程解析:需求评估与SEO优化功能开发指南  济南网站制作的价格,历城一职专官方网站?  如何在云虚拟主机上快速搭建个人网站?  深圳企业网站制作设计,在深圳如何网上全流程注册公司?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  赚钱网站制作软件,建一个网站怎样才能赚钱?是如何盈利的?  如何在阿里云部署织梦网站?  如何通过商城自助建站源码实现零基础高效建站?  如何在阿里云高效完成企业建站全流程?  javascript中的try catch异常捕获机制用法分析  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  如何基于PHP生成高效IDC网络公司建站源码?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  教学论文网站制作软件有哪些,写论文用什么软件 ?  郑州企业网站制作公司,郑州招聘网站有哪些?  如何续费美橙建站之星域名及服务?  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。