动态代理
来源:互联网 发布:文章cms 编辑:程序博客网 时间:2024/05/16 06:21
从输入流中得到text
public static String getTextFromStream(InputStream is){ byte[] b = new byte[1024]; int len=0; //字节数组输出流,读取输入流文本数据的同时,把数据写入输出流 ByteArrayOutputStream bos = new ByteArrayOutputStream(); try { while((len=is.read(b))!=-1){ bos.write(b,0,len); } //字节数组输出流中的数据转换成字节数组 return new String(bos.toByteArray()); } catch (IOException e) { e.printStackTrace(); } return null;}
javaBean的封装
public class WebUtils { public static <T> T fillFormBean(Class<T> clazz,HttpServletRequest request){ T t =null; try { t = clazz.newInstance(); BeanUtils.populate(t, request.getParameterMap()); } catch (Exception e) { e.printStackTrace(); } return t; }}
创建非指定长度的二维数组
/* * 为传递的参数,构建一个二维数组. * * 数组无论是一维还是二维数组,初始化时必须定义数组的长度. * * 虽然目前初始化二维数组时,可以定义该数组的长度(这种写法不具备通用性). * * 定义一个List集合的话,定义时是不需要初始化长度的. * * 利用一个List集合来替代二维数组,List集合包含的应该是一维数组:List<Object[]> * * 为每一次chongyu执行SQL语句传递参数时,需要一个一维数组.(再用一个List集合替代一维数组):List<Object> * * List集合转换成数组的方法:toArray()方法. */ List<Object[]> list = new ArrayList<Object[]>(); for (Orderitem orderitem : items) { // 一维数组表示一条SQL语句的所有参数 List<Object> item = new ArrayList<Object>(); item.add(orderitem.getOrder_id()); item.add(orderitem.getProduct_id()); item.add(orderitem.getBuynum()); list.add(item.toArray()); } runner.batch(conn, sql2, list.toArray(new Object[0][]));
动态代理的使用
1,对于没有实现接口的类:导入包:cglib
/**没有实现接口的类的动态代理(基于子类的动态代理,代理类是被代理类的子类) * @param args */public static void main(String[] args) { final SpringBrother sb = new SpringBrother(); /* * type:被代理的类型 callback 代理要做的事情 * 代理后是一个子类 */ SpringBrother s = (SpringBrother)Enhancer.create(SpringBrother.class, new MethodInterceptor() { @Override public Object intercept(Object obj, Method method, Object[] args, MethodProxy arg3) throws Throwable { if(method.getName().equals("sing")){ //如果唱歌,得按我的流程来 float money = (Float)args[0]; if(money>1000){ Object retValue = method.invoke(sb, money/2); return retValue; } }else{ //如果不是唱歌,就直接执行 return method.invoke(sb, args); } return null; } }); s.sing(2000);//调用s的方法}
2,实现了接口的类的代理
final SpringBrother sb = new SpringBrother();//动态代理Human man = (Human)Proxy.newProxyInstance(sb.getClass().getClassLoader(), sb.getClass().getInterfaces(), new InvocationHandler() { /** * proxy :代理人 * method:代理的方法 * args: 方法的参数 */ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if(method.getName().equals("sing")){ //如果唱歌,得按我的流程来 float money = (Float)args[0]; if(money>1000){ Object retValue = method.invoke(sb, money/2); return retValue; } }else{ //如果不是唱歌,就直接执行 return method.invoke(sb, args); } return null; } });man.eat();//这个方法执行的时候:man对象传递给了invoke()方法中的proxy;eat()传给了method,
0 0
- 代理-->静态代理&动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 动态代理
- 大道至简:朴素贝叶斯分类器
- 基础-输入输出1
- 利用数组实现大数的阶乘
- [BZOJ1626] [Usaco2007 Dec]Building Roads 修建道路
- git学习笔记 -创建仓库、更新代码
- 动态代理
- 编辑神器sublime中使用Emmet的实例
- BestCoder Round #59 (div.2) HDU5499 SDOI 排序+贪心
- Jsoup中getElementsByClass中className有空格处理
- 迭代
- Slmgr.vbs使用参数详解
- Objective-C中的SEL
- 黑马程序员--NSValue的使用
- 交换ctrl和caps lock