动态代理入门

原创 2013年12月04日 09:44:16
public class User {
	private int id;
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
}

 

public interface UserManager {

	public void aadUser(User user);
	
	public void deleteById(int id);
	
	public void updateUser(User user);
	
	public User findById(int id);
}

 

public class UserManagerImp implements UserManager {

	@Override
	public void aadUser(User user) {
		System.out.println("----------addUser------------");
	}

	@Override
	public void deleteById(int id) {
		System.out.println("----------deleteById------------");
	}

	@Override
	public User findById(int id) {
		System.out.println("----------findById------------");
		return null;
	}

	@Override
	public void updateUser(User user) {
		System.out.println("----------updateUser------------");
	}

}

 

public class SecurityHandler implements InvocationHandler {

	private Object targetObject;
	
	/*
	 * 下面方法是得到代理对象,如果得不到代理对象,这个效果也是没有作用的
	 * 最后一个参数是InvocationHandler接口,这也是为什么动态代理对象一定要实现这个接口的原因
	 * 得到的代理对象会执行invoke()方法
	 */
	public Object newProxy(Object targetObject){
		this.targetObject = targetObject;
		//得到代理对象的方法,这个是反射机制里面的对象方法
		return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
									  targetObject.getClass().getInterfaces(),
									  this);
	}
	
	/*
	 * 在代理对象之前做业务处理,然后再做对象定义的方法,因此最后要返回代理的对象
	 */
	@Override
	public Object invoke(Object proxcy, Method method, Object[] args)
			throws Throwable {
		checkSecurity();
		return method.invoke(this.targetObject, args);
	}
	
	public void checkSecurity(){
		System.out.println("-----------checkSecurity()----------");
	}

}

 

public class TestMain{

	public static void main(String[] args) {
		//产生一个安全代理的对象方法
		SecurityHandler handler = new SecurityHandler();
		//得到一个已经被代理的对象
		UserManager userManager = (UserManager)handler.newProxy(new UserManagerImp());
		
		User user = new User();
		user.setAge(23);
		user.setId(1);
		user.setName("huangbiao");
		//被代理对象做数据业务之前会先调用invoke()方法
		userManager.aadUser(user);
	}

}

 

动态代理(一)——动态代理入门

动态代理简单入门动态代理技术在实际开发中用到的非常多,所以有必要详解一下这门技术。这门技术非常难,因此学起来还是比较困难的,但我们不怕困难,定要啃下这块硬骨头。 要想理解动态代理这门技术,必须明确两...
  • yerenyuan_pku
  • yerenyuan_pku
  • 2016年09月20日 16:27
  • 677

Java动态代理入门

今天学习了Java的动态代理的使用方法。具体方法如下: package com.meiran.proxy; import org.junit.Test; import java.lang.refl...
  • mranyang
  • mranyang
  • 2016年07月20日 14:37
  • 212

Java动态代理简单入门

关于java动态代理模式的简单学习
  • sinat_25484327
  • sinat_25484327
  • 2016年10月18日 10:41
  • 89

java代理(静态代理和jdk动态代理以及cglib代理)

说到代理,脑袋中浮现一大堆代理相关的名词,代理模式,静态代理,jdk代理,cglib代理等等。 记忆特别深刻的是,一次面试中,一位面试官问我,spring的AOP核心采用的设计模式是什么什么模式,阅读...
  • fighterandknight
  • fighterandknight
  • 2016年04月20日 17:34
  • 4570

动态代理的几种方式

AOP的拦截功能是由java中的动态代理来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常时候执...
  • Happy_wu
  • Happy_wu
  • 2017年12月19日 14:34
  • 1046

动态代理(2)----动态代理和AOP

根据前面介绍的Proxy和InvocationHandler,实在很难看出这种动态代理的优势,下面介绍一种更实用的动态代理机制.只要我们开发一个实际使用的软件系统,总会出现相同代码重复出现的情形,在这...
  • beijiguangyong
  • beijiguangyong
  • 2013年02月28日 22:09
  • 4175

动态代理——从一窍不通到恍然大悟

从具体的例子出发,由浅入繁介绍代理这种设计模式和具体可以处理的问题
  • u011026779
  • u011026779
  • 2017年04月02日 22:50
  • 783

AOP的简单实现---动态代理机制

动态代理:动态代理顾名思义就是代理目标对象处理某些事情 正向代理:可以理解成火车售卖点就是中国铁路总公司的代理,我们把买票的业务委托给火车票售卖点,售卖点通过软件等形式替我们向铁总买票,然后再将...
  • yang1464657625
  • yang1464657625
  • 2016年12月20日 11:51
  • 358

JDK动态代理的实现和原理解析(基于JDK1.7)

一、什么是代理代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。详细介绍请参考:...
  • xiaokang123456kao
  • xiaokang123456kao
  • 2017年08月29日 20:18
  • 653

为什么要使用动态代理?

为什么要使用动态代理?也就是说它解决了什么问题。 假如现在有这样的需求 需求1-日志:在程序执行期间追踪正在发生的活动 需求2-验证:希望计算器只能处理正数的运算比如:一个加减乘除 运算的类 可...
  • JosephLoveJesus
  • JosephLoveJesus
  • 2016年12月02日 12:07
  • 511
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态代理入门
举报原因:
原因补充:

(最多只允许输入30个字)