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小时内与您取得联系。