高新技术后篇。知识点:Spring框架。

    老师讲得Spring框架还是挺简单易懂的。

     对于Spring,我自己的理解是,在面向AOP编程的时候,我们需要用代理来完成。代码也不难。项目总共有四个Java文件,一个properties文件。篇幅有限。我这里只贴出来2个主要Java文件。一个是有main函数的Java文件,一个是代理的Java文件。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;

/**
 * Spring框架
 * @author Administrator
 *
 */
public class Spring {
 public static void main(String args[])throws IOException  {
  InputStream in = null;
  //in = new FileInputStream("F:\\workspace\\JavaWorkSpace\\workspace\\text\\src\\Spring.property");
  in = Spring.class.getClassLoader().getResourceAsStream("pro.properties");
  JavaBeanFactory factory = new JavaBeanFactory(in);
  Collection al = (Collection)factory.receive("XXX");
  al.add("sfdsf");
  System.out.println(al);
  in.close();
 }

}


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


public class ProxyJavaBean {
 private Advice advice;
 private Object target;
 
 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;
 }

 public Object getProxy() {
  Proxy proxy = null;
  proxy = (Proxy)Proxy.newProxyInstance(
    target.getClass().getClassLoader(),
    target.getClass().getInterfaces(),
    new InvocationHandler() {

     @Override
     public Object invoke(Object arg0, Method method, Object[] arg2)
       throws Throwable {
      // TODO Auto-generated method stub
      advice.beforeMethod(method);
      Object reval = method.invoke(target, arg2);
      advice.afterMethod(method);
      return reval;
     }
     
    });
  return proxy;
 }
}

 

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;


public class ProxyJavaBean {
 private Advice advice;
 private Object target;
 
 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;
 }

 public Object getProxy() {
  Proxy proxy = null;
  proxy = (Proxy)Proxy.newProxyInstance(
    target.getClass().getClassLoader(),
    target.getClass().getInterfaces(),
    new InvocationHandler() {

     @Override
     public Object invoke(Object arg0, Method method, Object[] arg2)
       throws Throwable {
      // TODO Auto-generated method stub
      advice.beforeMethod(method);
      Object reval = method.invoke(target, arg2);
      advice.afterMethod(method);
      return reval;
     }
     
    });
  return proxy;
 }
}

思考与感悟:我看老师视频的时候,感觉很容易。当我自己写的时候还是有点磕磕碰碰的。不过还好。主要的知识点就是熟悉Proxy代理类。因为前面有很大篇幅的反射,所以理解起来还是比较容易的。但是老师的代码中的目标类是ArrayList,是一个实现了接口的类,代理类只要取跟他相同的接口就可以了。但是老师没有实现当目标类没有实现接口的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值