Spring代理模式——动态代理

标签: SpringAop 动态代理 代理模式
5人阅读 评论(0) 收藏 举报
分类:
2、动态代理
代理对象不需要实现接口
代理对象生成,使用到JDKAPI,动态的在内存中创建代理对象
动态代理,也叫JDK代理,接口代理

API中:
Proxy
public static Object newProxyInstance(ClassLoader loader,指定当前目标对象的使用类的加载器
                                          Class<?>[] interfaces,目标对象实现的接口类型
                                          InvocationHandler h)事件处理器
目标对象一定要实现接口,否则不能够使用动态代理
代理对象class $Proxy0 implement xxx(接口类)来完成的


假如有一个目标对象没有继承接口,那可以用Cglib


接口:

package edu.cloud.dynamic;


public interface IUserDao {
public void save() throws Exception;

public void update() throws Exception;

}

目标对象:

package edu.cloud.dynamic;


/**
 * 目标对象
 * @author huangbaida
 * @description 
 * @date 2018年1月23日
 */
public class UserDao implements IUserDao {


@Override
public void save() throws Exception {
//System.out.println("----开启事务----"); //想扩展得修改目标对象的源代码,不方便
System.out.println("----数据保存----");
}


@Override
public void update() throws Exception {
System.out.println("----数据已经修改----");
}


}

代理对象:

package edu.cloud.dynamic;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


public class ProxyFactory {
//目标对象
private Object target;
public ProxyFactory(Object target) {
this.target = target;
}

//生成代理对象
public Object getProxyInstance() {
return Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {

@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("开启事务");

//调用目标对象的方法
Object result = method.invoke(target, args);

System.out.println("提交事务");

return result;
}
}
);

}

}

测试:

package edu.cloud.dynamic;


public class Test {


public static void main(String[] args) {
//目标对象
UserDao target = new UserDao();

//代理对象
//class com.sun.proxy.$Proxy0 内存中动态生成代理对象
IUserDao proxy = (IUserDao) new ProxyFactory(target).getProxyInstance();

try {
proxy.save();
proxy.update();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

//$Proxy0输出它的类类型看看
System.out.println(proxy.getClass());
}


}



查看评论

JAVA的动态代理模式分析以及与spring AOP的比较

本文是结合《轻量级Java EE企业应用实战(李刚)》这本书以及个人的一点理解写的,记录下来以作学习之用。 1.代理就是一个java对象代表另一个java对象来采取行动。为什么需要采用代理呢?很简单...
  • yyzyyx
  • yyzyyx
  • 2016年05月25日 16:43
  • 998

Java代理模式 动态代理 的应用场景

先看一下代理模式,这个应该是设计模式中最简单的一个了,类图   代理模式最大的特点就是代理类和实际业务类实现同一个接口(或继承同一父类),代理对象持有一个实际对象的引用,外部调用时操作的...
  • yansong_8686
  • yansong_8686
  • 2016年02月19日 00:22
  • 6547

spring02 注解方式实现MVC、spring的继承、代理模式(静/动) :jdk动态代理,cglib动态代理

一、 注解:           1、 基础回顾            1、注解就是为了说明java中的某一个部分的作用(Type)            2、注解都可以用于哪个部分是@Tar...
  • qq_28139371
  • qq_28139371
  • 2016年01月02日 10:33
  • 953

Spring的代理模式(静态代理和动态代理)

public class HelloProxy implements InvocationHandler { private Logger logger=Logger.getLogger(this....
  • lzghxjt
  • lzghxjt
  • 2016年07月10日 11:04
  • 3317

Spring源码学习之动态代理

谈到代理模式,是java的一种常见的设计模式,代理模式显著的特点是代理类和委托类有相同的接口,代理类的主要功能是为委托类预处理消息,过滤消息,把消息转发给委托类,以及事后处理消息等等。代理类和委托类之...
  • hsj1213522415
  • hsj1213522415
  • 2017年02月21日 17:42
  • 323

springMVC学习(代理模式)

今天学习了,spring中的cglib代理实现,在正式开始学习cglib代理之前,我们先来学习自定义的代理,以及jdk为我们提供的代理模式。那么什么是代理模式,说的直白一点,就是用一个代理来实现我对具...
  • mockingbirds
  • mockingbirds
  • 2015年05月01日 20:53
  • 3703

Spring AOP的代理模式详解

Spring AOP的代理模式详解 代理模式:代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些...
  • judyfun
  • judyfun
  • 2015年05月25日 20:39
  • 8868

对代理模式和动态代理的理解

  代理模式代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。代理模式一般涉及到...
  • software_jianghai
  • software_jianghai
  • 2006年10月10日 18:16
  • 1079

java反射实现动态代理模式

代理模式的作用是:为其他对象提供一种可以控制的访问方式, 代理的角色: 1.抽象角色  声明真实对象和代理对象需要实现的接口; 2.代理角色  代理对象内部含有对真实对象的引用,从而可以操纵...
  • a15271801276
  • a15271801276
  • 2017年10月08日 14:54
  • 225

Android开发中无处不在的设计模式——动态代理模式

继续更新设计模式系列,写这个模式的主要原因是最近看到了动态代理的代码。 先来回顾一下前5个模式: - Android开发中无处不在的设计模式——单例模式 - Android开发中无处不在的设...
  • sbsujjbcy
  • sbsujjbcy
  • 2016年01月21日 11:37
  • 8229
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 1273
    排名: 3万+
    博客专栏
    最新评论