1.一个代理模式的实例 通过 Proxy类进行代理

wait.java

//定义一个接口
public interface wait {
void say();
}

//目标对象实现接口并重写方法
public class waiter implements wait {
@Override
public void say() {
// TODO Auto-generated method stub
System.out.println("先生");
} }
public class SayHelloBeforemale implements MethodBeforeAdvice {//实现相应增强类的接口
@Override
public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
//arg0 是 目标类的方法 arg1是目标类的入参数 arg2是目标类实例 发生异常则抛给Throwable
// TODO Auto-generated method stub
System.out.println("hello");
}
}

UnitTest.java

public class UnitTest {
//实明变量
private SayHelloBeforemale male ;
private waiter wait;
private ProxyFactory xy;
@Before
public void init(){
//实例化并赋值
male = new SayHelloBeforemale();
wait = new waiter();
xy = new ProxyFactory();
//设置目标对象
xy.setTarget(wait);
//设置增强类对象
xy.addAdvice(male); }
@Test
public void test(){
//
waiter w = (waiter)xy.getProxy();
w.say();
}

2.通过spring的配置文件进行代理

  这个方法进行代理所需的类和上面的 wait接口 和 它的实现类waiter 还有sayhelloadvice类

  不同之处在于不是使用 ProxtyFactory来进行代理目标对象,而是通过Schema 的xml文件进行配置代理。

beans.xml

<bean id="sayhelloadvice" class="test3.SayHelloBeforemale"/>
<bean id="target" class="test3.waiter"/>
<bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean"
p:proxyInterfaces="test3.wait"
p:interceptorNames="sayhelloadvice"
p:target-ref="target"
/>

- target:代理的目标对象

- proxyInterfaces:代理所需要实现的接口,可以多个接口。该属性还有一个别名是Interfaces

- interceptorNames:需要植入目标对象的bean列表。采用bean的名称指定。这些bean必须实现类 org.aopalliance.intercept.MethodInterceptor

  或 org.springframework.aop.Advisor的bean ,配置中的顺序对应调用的顺序。

- proxyTargetClass:是否对类进行代理(而不是进行对接口进行代理),设置为true时,使用CGLib代理,且proxyInterfaces属性被ProxyFactoryBean忽略。

UnitTest.java

public class UnitTest {
@Test //测试在spring 通过ProxyFactoryBean 配置代理
public void test2(){
ApplicationContext a = new ClassPathXmlApplicationContext("test3/beans.xml");
wait w = (wait)a.getBean("waiter");
w.say();
}
}

spring-AOP-ProxyFactoryBean代理的实例的更多相关文章

  1. 死磕Spring之AOP篇 - Spring AOP自动代理(二)筛选合适的通知器

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  2. Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式

    Hibernate 延迟加载的代理模式 和 Spring AOP的代理模式 主题 概念 Hibernate 延迟加载的代理模式 Spring AOP的代理模式 区别和联系 静态代理和动态代理 概念 代 ...

  3. 死磕Spring之AOP篇 - Spring AOP自动代理(一)入口

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  4. 死磕Spring之AOP篇 - Spring AOP自动代理(三)创建代理对象

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  5. spring aop 动态代理批量调用方法实例

    今天项目经理发下任务,需要测试 20 个接口,看看推送和接收数据是否正常.因为对接传输的数据是 xml 格式的字符串,所以我拿现成的数据,先生成推送过去的数据并存储到文本,以便验证数据是否正确,这时候 ...

  6. Spring AOP动态代理原理与实现方式

    AOP:面向切面.面向方面.面向接口是一种横切技术横切技术运用:1.事务管理: (1)数据库事务:(2)编程事务(3)声明事物:Spring AOP-->声明事物   2.日志处理:3.安全验证 ...

  7. 什么是 Spring AOP 和代理

    https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_9403056301388627935% ...

  8. spring AOP 动态代理和静态代理以及事务

    AOP(Aspect Oriented Programming),即面向切面编程 AOP技术,它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装 ...

  9. Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题

    Spring AOP底层的动态代理实现有两种方式:一种是JDK动态代理,另一种是CGLib动态代理. JDK动态代理 JDK 1.3版本以后提供了动态代理,允许开发者在运行期创建接口的代理实例,而且只 ...

  10. Spring Aop 动态代理失效分析

    1. Spring Aop 原理 Spring Aop 通过动态代理创建代理对象,在调用代理对象方法前后做增强. 2. Transactional, Async 注解失效? 当在动态代理方法中调用当前 ...

随机推荐

  1. Xcode自带iOS测试方法

    在说Xcode自带测试方法前先讲下程序在内存中的空间划分, 一般可分为5个部分: #1. BSS段, 存放未初始化的全局变量. BSS是英文Block Started by Symbol的简称.BSS ...

  2. JS验证电话号是否合法

    /******************** 函数名称:IsTelephone 函数功能:固话,手机号码检查函数,合法返回true,反之,返回false 函数参数:obj,待检查的号码 检查规则: (1 ...

  3. Java编程测试_类的使用

    package test; class A { private static int i; // Static, Private Attribute private static int j; // ...

  4. 浅谈iOS程序员的成长和进阶

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  5. sicily 1063. Who's the Boss 排序+递推

    #include <cstdio> #include <algorithm> using namespace std; struct Emp{ int id, salary, ...

  6. Gulp入门与解惑

    Gulp简介 Gulp.js 是一个自动化构建工具,开发者可以使用它在项目开发过程中自动执行常见任务.Gulp.js是基于 Node.js构建的,利用Node.js流的威力,你可以快速构建项目. 安装 ...

  7. HttpRequest获取文件流,HttpResponse输出文件流

    HttpResponse输出文件: Response.Clear(); Response.ContentType = "application/octet-stream"; //通 ...

  8. Linux 下查看CPU的使用情况

    1.top使用权限:所有使用者使用方式:top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]说明:即时显示process的动态d :改变显示的更新速度,或是在交谈 ...

  9. Hibernate框架单向多对多关联映射关系

    建立单向多对多关联关系    Project.java (项目表)                private Integer proid;                private Strin ...

  10. 极光开发者服务推出统计产品JAnalytics

    极光以提供更加全面的开发者服务为目标,利用极光推送的数据和网络优势结合更丰富的功能,推出了极光统计(英文:JAnalytics).至此,极光开发者服务更加丰富.完善了. 极光统计有独立的统计 SDK, ...