java代理课程测试 spring AOP代理简单测试
来源:互联网 发布:java多线程框架有哪些 编辑:程序博客网 时间:2024/06/04 18:06
jjava加强课程测试代码 反射、 代理 、泛型、beanUtils等 项目源码下载:http://download.csdn.net/detail/liangrui1988/6568169
热身运动代码。。。。。。。。。
package com.proxyTest;import java.lang.reflect.Constructor;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.sql.Connection;import java.util.ArrayList;import java.util.Collection;public class ProxyTest {public static void main(String[] args) throws Exception{//获取代理字节码Class clazzProxy=Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class);System.out.println(clazzProxy.getName());System.out.println("-----------Proxy构造方法列表------------");Constructor[] constructor=clazzProxy.getConstructors();for(Constructor con:constructor){//get名称String conName=con.getName();//接接参数StringBuilder sb=new StringBuilder(conName);//单线程 快 sb.append('(');//get 获得参数类型的字节码Class[] paraClass=con.getParameterTypes();for(Class c:paraClass){//获取参数java加强课程测试代码 反射、 代理 、泛型、beanUtils等sb.append(c.getName()).append(',');}if(paraClass!=null&¶Class.length!=0)sb.deleteCharAt(sb.length()-1);sb.append(')');System.out.println(sb.toString());}System.out.println("\n================Proxy方法列表=============================");Method[] methods=clazzProxy.getMethods();for(Method me:methods){//get名称String conName=me.getName();//接接参数StringBuilder sb=new StringBuilder(conName);//单线程 快 sb.append('(');//get 获得参数类型的字节码Class[] paraClass=me.getParameterTypes();for(Class c:paraClass){//获取参数sb.append(c.getName()).append(',');}if(paraClass!=null&¶Class.length!=0)sb.deleteCharAt(sb.length()-1);sb.append(')');System.out.println(sb.toString());}System.out.println("\n================Proxy创建实例============================="); //获取指定的构造方法 Constructor conIns=clazzProxy.getConstructor(InvocationHandler.class); //创建一个connection类做参数 class myConn1 implements InvocationHandler{@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {// TODO Auto-generated method stubreturn null;} } //创建实例 Collection proxy1 =(Collection) conIns.newInstance(new myConn1()); System.out.println(proxy1); // proxy1.size(); //创建实例 方式2=================================== @SuppressWarnings("unchecked")Collection<String> proxy2 =(Collection<String>) conIns.newInstance(new InvocationHandler(){ //内部类 @Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {return null;} } ); //创建实例 方式3=================================== Collection proxy3=(Collection) Proxy.newProxyInstance( //类加载器 Collection.class.getClassLoader(), // 参数数内型 new Class[]{Collection.class}, //参数值 new InvocationHandler(){ /** * proxy 代理的对象 * method 代理对象的那个方法 * args 方法中传入的参数 */ ArrayList target=new ArrayList();@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable { Long startTime=System.currentTimeMillis();//方法调用 参数 目标对象和参数Object obj=method.invoke(target, args); Long endTime=System.currentTimeMillis(); System.out.println(method.getName()+"runTime of 用时:"+(endTime=startTime)); //死循环// return method.invoke(proxy,args); //返回对象 return obj;}} ); proxy3.add("aaaa"); proxy3.add("bbbb"); proxy3.add("ccccc"); // System.out.println(proxy3.size()); }}
进一步加强代码
package com.proxyTest;import java.lang.reflect.Method;/** * 通知接口 * @author liangrui * */public interface Advice {public void beforeMethod(Method m);//开始方法public void afterMethod(Method m);//结束方法//异常方法,前后方法 省略}
package com.proxyTest;import java.lang.reflect.Method;/** * 实现自已的处理功能对象 * @author liangrui * */public class Myadvice implements Advice { Long startTime=null;@Overridepublic void beforeMethod(Method m) {System.out.println("欢迎来到代理处理对象 开始方法"); startTime=System.currentTimeMillis();}@Overridepublic void afterMethod(Method m) {System.out.println("欢迎来到代理处理对象 执行之后处理的方法"); Long endTime=System.currentTimeMillis();System.out.println(m.getName()+"runTime of 用时:"+(endTime=startTime)); }}
package com.proxyTest;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 ProxyTests {public static void main(String[] args) {ArrayList target=new ArrayList();//代理目标对象//获取代理 对象Collection coll=(Collection) getProxy(target,new Myadvice());/** * 每次在执行自已方法的同时 * 都会执行自定义对象(MyAdivce)功能来进行处理 */coll.add("开始工作");System.out.println("\n---------------处理一个OK--------------------");coll.add("开始工作3");System.out.println("\n---------------处理一个OK--------------------");coll.add("开始工作2");System.out.println("\n---------------处理一个OK--------------------");System.out.println(coll.size());}/** * 代理处理方法 返回处理后的对象 * @param target 目标对象 * @param advice 通告 * @return */public static Object getProxy(final Object target,final Advice advice){Object proxyObj=Proxy.newProxyInstance(target.getClass().getClassLoader()//类加载器, target.getClass().getInterfaces()//参数类型,new InvocationHandler() {//调用方法进行处理@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {//代理功能处理 把方法交给它进行处理advice.beforeMethod(method);//处理自已的方法Object returnObj=method.invoke(target, args);advice.afterMethod(method);//返回处理后的对象return returnObj;}});return proxyObj;}}
//spring AOP 简单的实现例子
package com.AopFramework;import java.io.IOException;import java.io.InputStream;import java.util.Properties;import com.proxyTest.Advice;public class FactoryBean {Properties pro=new Properties();public FactoryBean(InputStream is){try {pro.load(is);//加载数据流得到配制信息} catch (IOException e) {e.printStackTrace();}}//通过Key获取对象public Object getBean(String name){//通过Key获取类路径String classPath=pro.getProperty(name);Object bean=null;try {//获取类的字节码Class clazz=Class.forName(classPath);//得到对象实例bean=clazz.newInstance();} catch (Exception e) {e.printStackTrace();}//如果是代理对象则返回代理对象if(bean instanceof ProxyFactoryBean){//强转为代理对象ProxyFactoryBean proxyFactoryBean=(ProxyFactoryBean)bean;Object ProxyBean = null;try {//获取功能对象Advice advice=(Advice) Class.forName(pro.getProperty(name+".advice")).newInstance();//目标对象Object target= Class.forName(pro.getProperty(name+".target")).newInstance();proxyFactoryBean.setAdvice(advice);//为代理对象加入 功能对象proxyFactoryBean.setTarget(target);//加入目标对象//get代理对象ProxyBean = proxyFactoryBean.getProxy();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} //返回代理对象return ProxyBean;}//返回没有代理过的对象return bean;}}
package com.AopFramework;import java.io.IOException;import java.io.InputStream;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.Properties;import com.proxyTest.Advice;public class ProxyFactoryBean {private Advice advice;//代理通告对象private Object target;//代理目标对象/** * 代理处理方法 返回处理后的对象 * @param target 目标对象 * @param advice 通告 * @return */public Object getProxy() {Object proxyObj=Proxy.newProxyInstance(target.getClass().getClassLoader()//类加载器, target.getClass().getInterfaces()//参数类型,new InvocationHandler() {//调用方法进行处理@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {//代理功能处理 把方法交给它进行处理advice.beforeMethod(method);//处理自已的方法Object returnObj=method.invoke(target, args);advice.afterMethod(method);//返回处理后的对象return returnObj;}});return proxyObj;}//=======================================public Advice getAdvice() {return advice;}public void setAdvice(Advice advice) {this.advice = advice;}public Object getTarget() {return target;}public void setTarget(Object target) {this.target = target;}}
config.properties 配置文件
#target#xxx=java.util.ArrayList#proxyxxx=com.AopFramework.ProxyFactoryBean#target objectxxx.target=java.util.ArrayList#advice objectxxx.advice=com.proxyTest.Myadvice
package com.AopFramework;import java.io.InputStream;import java.util.ArrayList;import java.util.Collection;import com.proxyTest.Myadvice;public class AopFrameworkTest {public static void main(String[] args) {//加载配制文件InputStream is=AopFrameworkTest.class.getResourceAsStream("config.properties");//创建工厂实例 ---》获得beanObject obj=new FactoryBean(is).getBean("xxx");//根据你入的名称和配制 打印获得的对象名称System.out.println(obj.getClass().getName());//打印测试Collection coll=(Collection) obj;/** * 每次在执行自已方法的同时 * 都会执行自定义对象(MyAdivce)功能来进行处理 */coll.add("开始工作");System.out.println("\n---------------处理一个OK--------------------");coll.add("开始工作2");System.out.println("\n---------------处理一个OK--------------------"); System.out.println(coll.size());}}
- java代理课程测试 spring AOP代理简单测试
- java:代理测试
- 测试java动态代理
- Java动态代理-->Spring AOP
- spring aop,java动态代理
- java spring aop 的代理的简单实现
- Spring -AOP -java静态代理和动态代理实例
- Java 动态代理模仿Spring AOP
- Spring AOP与Java动态代理
- Java动态代理模拟spring的AOP
- [Java]Spring AOP基础知识-动态代理
- Spring AOP java动态代理实现
- Spring AOP 之 java 动态代理基础
- Spring AOP——Java动态代理
- Spring Boot AOP之Java 动态代理
- java中代理,静态代理,动态代理以及spring aop代理方式,实现原理统一汇总
- Spring AOP 代理机制
- spring aop代理列子
- WebService第三步 - 项目开发实战2
- 数据结构之排序--选择类排序
- java基础学习—异常
- C++复习与重新学习一
- CentOS6.4环境下编译安装Bandwidthd和Postgrsql心得笔记
- java代理课程测试 spring AOP代理简单测试
- CountDownLatch:倒计时计数器
- 算法练习之KMP算法
- ORACLE EXP/IMP 说明
- 英语单词
- 解决“Warning: require_once() 的几个方法
- Android 不同html文件之间跳转
- 关于PHP文件加密--ZendGuard-6_0_0以及ZendGuardLoader-70429-PHP-5.4-Windows-x86
- 快速排序中常见中轴选择方法及实现代码