`
lvwenwen
  • 浏览: 958490 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

spring动态代理

阅读更多

 

package cn.itcast.day3;

import java.lang.reflect.Method;

public interface Advice {
	void beforeMethod(Method method);
	void afterMethod(Method method);
}

package cn.itcast.day3;

import java.lang.reflect.Method;

public class MyAdvice implements Advice {
	long beginTime = 0;
	public void afterMethod(Method method) {
		// TODO Auto-generated method stub
		System.out.println("从传智播客毕业上班啦!");		
		long endTime = System.currentTimeMillis();
		System.out.println(method.getName() + " running time of " + (endTime - beginTime));

	}

	public void beforeMethod(Method method) {
		// TODO Auto-generated method stub
		System.out.println("到传智播客来学习啦!");
		beginTime = System.currentTimeMillis();
	}

}

package cn.itcast.day3;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;

public class ProxyTest {

	/**
	 * @param args
	 */
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
//		Class clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
//		System.out.println(clazzProxy1.getName());
//		
//		System.out.println("----------begin constructors list----------");
//		/*$Proxy0()
//		$Proxy0(InvocationHandler,int)*/
//		Constructor[] constructors = clazzProxy1.getConstructors();
//		for(Constructor constructor : constructors){
//			String name = constructor.getName();
//			StringBuilder sBuilder = new StringBuilder(name);
//			sBuilder.append('(');
//			Class[] clazzParams = constructor.getParameterTypes();
//			for(Class clazzParam : clazzParams){
//				sBuilder.append(clazzParam.getName()).append(',');
//			}
//			if(clazzParams!=null && clazzParams.length != 0)
//				sBuilder.deleteCharAt(sBuilder.length()-1);
//			sBuilder.append(')');
//			System.out.println(sBuilder.toString());			
//		}
//
//		System.out.println("----------begin methods list----------");
//		/*$Proxy0()
//		$Proxy0(InvocationHandler,int)*/
//		Method[] methods = clazzProxy1.getMethods();
//		for(Method method : methods){
//			String name = method.getName();
//			StringBuilder sBuilder = new StringBuilder(name);
//			sBuilder.append('(');
//			Class[] clazzParams = method.getParameterTypes();
//			for(Class clazzParam : clazzParams){
//				sBuilder.append(clazzParam.getName()).append(',');
//			}
//			if(clazzParams!=null && clazzParams.length != 0)
//				sBuilder.deleteCharAt(sBuilder.length()-1);
//			sBuilder.append(')');
//			System.out.println(sBuilder.toString());			
//		}
//		
//		System.out.println("----------begin create instance object----------");
//		//Object obj = clazzProxy1.newInstance();
//		Constructor constructor = clazzProxy1.getConstructor(InvocationHandler.class);
//		class MyInvocationHander1 implements InvocationHandler{
//
//			public Object invoke(Object proxy, Method method, Object[] args)
//					throws Throwable {
//				// TODO Auto-generated method stub
//				return null;
//			}
//		
//		}
//		Collection proxy1 = (Collection)constructor.newInstance(new MyInvocationHander1());
//		
//		System.out.println(proxy1);
//		proxy1.clear();
//		//proxy1.size();
//		//System.out.println("111111111111111");
//		
//		Collection proxy2 = (Collection)constructor.newInstance(new InvocationHandler(){
//
//			public Object invoke(Object proxy, Method method, Object[] args)
//					throws Throwable {
//				return null;
//			}
//			
//		});
 		//动态代理
		final ArrayList target = new ArrayList();			
		Collection proxy3 = (Collection)getProxy(target,new MyAdvice());
		proxy3.add("zxx");
		proxy3.add("lhm");
		proxy3.add("bxd");
		//System.out.println(proxy3.size());
		//System.out.println(proxy3.getClass().getName());
 }
//把目标抽取成参数
	private static Object getProxy(final Object target,final Advice advice) {
		Object proxy3 = Proxy.newProxyInstance(
				target.getClass().getClassLoader(),
				/*new Class[]{Collection.class},*/
				target.getClass().getInterfaces(),
				new InvocationHandler(){
					public Object invoke(Object proxy, Method method, Object[] args)
							throws Throwable {
						advice.beforeMethod(method);
						Object retVal = method.invoke(target, args);
						advice.afterMethod(method);
						return retVal;						
					}
				}
				);
		return proxy3;
	}
}
分享到:
评论

相关推荐

    spring动态代理类的示范小版本,很简单的例子

    Spring 动态代理是Spring框架中的一个重要特性,它允许我们在不修改原有代码的情况下,为对象增加额外的功能。这个"spring动态代理类的示范小版本,很简单的例子"应该是提供了一个简单易懂的示例,帮助我们理解...

    Spring动态代理

    在Spring框架中,动态代理是一种重要的技术,它主要用于AOP(面向切面编程)场景,如日志记录、事务管理等。本篇文章将深入探讨Spring动态代理及其在Spring MVC中的应用,特别是在创建RESTful服务时如何利用注解来...

    spring动态代理原理

    本篇文章将深入探讨Spring动态代理的原理,并通过代码示例来解析其工作流程。 首先,我们需要理解JDK中的动态代理机制。Java提供了一种称为接口代理的机制,即通过`java.lang.reflect.Proxy`类和`java.lang.reflect...

    spring+动态代理

    Spring框架提供了一种便捷的方式来实现动态代理,这使得我们可以在不修改原有代码的情况下扩展或增强已有功能。在本篇中,我们将深入探讨Spring如何使用动态代理以及其在实际开发中的应用。 动态代理的核心概念是...

    Spring动态代理二.docx

    Spring 动态代理二 Spring 框架中动态代理技术的应用是非常广泛的,今天我们将讨论 Dao 层和 Service 层的动态代理二。 Dao 层的动态代理二: Dao 层的动态代理二是通过 MapperScannerConfigurer 实现的。这是一...

    四、Spring源码分析——动态代理

    在Spring框架中,动态代理是实现AOP(面向切面编程)的核心技术之一。它允许我们在不修改原有代码的情况下,为方法添加额外的功能,如事务管理、日志记录等。本篇文章将深入探讨Spring中的动态代理机制,以及它是...

    Spring动态代理第三方依赖jar.zip_aopalliance_1.0.jar_aspectjrt_aspectjweav

    Spring的核心特性之一就是它的动态代理机制,这使得我们可以实现面向切面编程(AOP)。本压缩包包含的是Spring动态代理中需要用到的一些关键第三方依赖,包括aopalliance-1.0.jar、aspectjrt-1.7.2.jar以及...

    cglib aop spring 动态代理

    jdk动态代理--适合企业级开发,但是它要求必须面向接口编程,假如目标类没有实现接口,则没办法代理这个类。 cglib代理, 1.cglib(Code Generation Library)是一个强大的,高性能,高质量的Code生成类库。它可以在...

    Spring动态代理一.docx

    在Spring框架中,动态代理是一种重要的机制,它主要用于AOP(面向切面编程)和事务管理。本篇文章将深入探讨Spring如何对Dao层和服务层进行动态代理,以及它与MyBatis集成的过程。 首先,Spring集成MyBatis的步骤...

    Spring 动态代理和aop切面编程例子

    在Spring框架中,动态代理和AOP(面向切面编程)是两个重要的概念,它们极大地增强了代码的可维护性和灵活性。下面将详细讲解这两个概念及其实际应用。 动态代理,是Spring提供的一种机制,允许我们在不修改原对象...

    动态代理和注解Spring.rar

    本资料“动态代理和注解Spring.rar”着重介绍了Spring框架中的两个关键概念:动态代理和注解的使用。 首先,我们来深入了解Spring中的动态代理。动态代理在Spring AOP(面向切面编程)中扮演着重要角色。AOP允许...

    Java动态代理(Spring Aop原理)

    在Spring框架中,AOP(面向切面编程)就是基于Java动态代理来完成的,用于实现横切关注点,如日志、事务管理等。这篇博客的文章链接虽然没有给出具体内容,但我们可以根据Java动态代理和Spring AOP的基本概念来深入...

    spring之AOP(动态代理)

    在Spring中,AOP主要通过两种动态代理技术实现:JDK动态代理和CGLIB动态代理。 首先,让我们详细了解一下JDK动态代理。JDK动态代理基于Java的接口实现,它适用于目标对象实现了至少一个接口的情况。在运行时,JDK...

    spring 的动态代理详解

    ### Spring的动态代理详解 #### 引言 在软件工程领域,代理模式是一种常见的设计模式,主要用于增强对象的功能,而不改变其原有的结构。Spring框架利用动态代理技术为Bean提供了横切关注点(如事务管理、日志记录...

    spring jdk动态代理

    Spring AOP允许我们通过代理来实现横切关注点,如日志、事务管理等,而JDK动态代理则是Spring AOP实现的一种方式。本文将深入探讨Spring如何利用JDK动态代理技术来实现这一功能,并通过实例解析其底层实现。 首先,...

    Spring的静态代理和动态代理

    总结来说,Spring的静态代理和动态代理都用于实现AOP,静态代理适用于简单场景,但需要手动编写代理类,而动态代理则更加灵活,可以在运行时动态创建代理对象,适用于接口众多的情况。了解和掌握这两种代理模式对于...

    非常好的JavaSpring项目资源,分享出来.zip

    使用maven构建项目,spring mvc,spring,分别与jdbctemplate,hibernate,mybatis全注解整合,其中包括包含有spring动态代理,数据库的事务处理。以及动态数据源的切换! 最新新增了ehcache缓存的应用 ...

Global site tag (gtag.js) - Google Analytics