动态代理入门

原创 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);
	}

}

 

相关文章推荐

Spring AOP 动态代理入门(一)

1.经典Spring AOP 类图(主要针对com.springframework.aop包)     AOP Alliance(http://aopalliance.sourceforge.net...

java语言基础入门——用反射实现动态代理

代理模式是java中一种很常见的设计模式,在企业应用高级框架中经常会用到,它的原理就是使用反射来完成。 为什么要使用代理?在某些情况在,一个客户不想或不能直接引用另一个对象,需要通过代理对象来间接操...

MyBatis-入门、动态代理、配置

MyBatis介绍 MyBatis前身是apache的一个开源项目iBatis。10年项目迁移到google code,并改名为MyBatis。13年11月迁移到Github。 MyBat...

JAVA的动态代理入门

Java动态代理采用反射的机制,在程序运行时动态生成代理类。我们可以采用Java动态代理机制来对被代理类的一些方法实现增强的行为。Spring的APO也是基于动态代理来实现的。 实现动态代理有两种方...

Spring入门预备知识(下)(动态代理与面向接口编程)

承接上篇对spring框架的入门基础知识积累 三)动态代理模式 1、数据库连接池概述 经常操作数据库的关闭,连接,很浪费系统资源,导致系统运行效率低,而数据库连接池的基本原理是在内部对象池中维护一定数...
  • xiu2016
  • xiu2016
  • 2016年10月13日 19:47
  • 615

mybatis之入门到开发(四)之 Mapper动态代理方式

一:原始Dao开发方式 【分析】原始Dao开发方法需要程序员编写Dao接口和Dao实现类。 Dao接口实现类如下public class UserDaoImpl implements UserDa...

Java动态代理 入门

转自:http://blog.csdn.net/hxh88888888/article/details/42238219Java动态代理详解 说到动态代理,顾名思义就是动态的代理(真是废话)。 关...

动态代理设置监听DEMO

  • 2017年03月01日 18:22
  • 20.96MB
  • 下载

Java动态代理和Java反射的Demo演示

  • 2015年11月06日 13:27
  • 39KB
  • 下载

代理模式【介绍、静态代理、动态代理、入门、应用】

代理介绍 代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式;即通过代理访问目标对象。 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作。(扩展目标对象的功能)。 可以做...
  • hon_3y
  • hon_3y
  • 2017年04月24日 20:20
  • 143
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态代理入门
举报原因:
原因补充:

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