A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© aspoMAN 中级黑马   /  2013-9-22 03:05  /  1552 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 aspoMAN 于 2013-9-22 10:07 编辑
  1. import java.io.*;
  2. import java.util.Properties;

  3. public class BeanFactory {
  4.         //配置文件存储对象
  5.         Properties props = new Properties();
  6.         public BeanFactory(InputStream ips){
  7.                 try {
  8.                         props.load(ips);
  9.                 } catch (IOException e) {
  10.                         // TODO Auto-generated catch block
  11.                         e.printStackTrace();
  12.                 }
  13.         }
  14.         
  15.         //getBean方法
  16.         public Object getBean(String name) throws Exception {
  17.                 //从配置文件获取要创建的Bean名
  18.                 String className = props.getProperty(name);
  19.                
  20.                 Object bean = null;
  21.                
  22.                 try {
  23.                         //根据className得到相应的class对象
  24.                         Class clazz = Class.forName(className);
  25.                         
  26.                         //对象实例化
  27.                         bean = clazz.newInstance();
  28.                 } catch (Exception e) {
  29.                         // TODO Auto-generated catch block
  30.                         e.printStackTrace();
  31.                 }
  32.                
  33.                 //判断如果传入的bean为ProxyFactoryBean的实例化对象,则创建代理进行处理,否则返回bean
  34.                 if(bean instanceof ProxyFactoryBean){
  35.                         ProxyFactoryBean proxyFactoryBean = (ProxyFactoryBean)bean;
  36.                         //通过配置文件获得Advice实例对象、target对象
  37.                         Advice advice = (Advice) Class.forName(props.getProperty(name + ".advice")).newInstance();
  38.                         Object target = Class.forName(props.getProperty(name + ".target")).newInstance();
  39.                         //赋值
  40.                         proxyFactoryBean.setAdvice(advice);
  41.                         proxyFactoryBean.setTarget(target);
  42.                         Object proxy = proxyFactoryBean.getProxy(proxyFactoryBean,advice);
  43.                         return proxy;
  44.                 }
  45.                 return bean;
  46.         }
  47. }


  48. import java.lang.reflect.InvocationHandler;
  49. import java.lang.reflect.Method;
  50. import java.lang.reflect.Proxy;

  51. public class ProxyFactoryBean {
  52.         private Advice advice;
  53.         private Object target;
  54.         
  55.         public Advice getAdvice() {
  56.                 return advice;
  57.         }
  58.         public void setAdvice(Advice advice) {
  59.                 this.advice = advice;
  60.         }
  61.         public Object getTarget() {
  62.                 return target;
  63.         }
  64.         public void setTarget(Object target) {
  65.                 this.target = target;
  66.         }
  67.         //获得Proxy对象
  68.         public Object getProxy(final Object target,final Advice advice) {
  69.                 //传递三个参数创建一个proxy对象
  70.                 Object proxy1 = Proxy.newProxyInstance(
  71.                                 target.getClass().getClassLoader(),
  72.                                 target.getClass().getInterfaces(),
  73.                                 new InvocationHandler(){

  74.                                         @Override
  75.                                         public Object invoke(Object proxy, Method method,
  76.                                                         Object[] args) throws Throwable {
  77.                                                 advice.beforeMethod(method);
  78.                                                 
  79.                                                 Object retValue = method.invoke(target, args);
  80.                                                 advice.afterMethod(method);
  81.                                                 
  82.                                                 return retValue;
  83.                                         }
  84.                                 }
  85.                 );
  86.                 return proxy1;
  87.         }
  88.         
  89. }
复制代码
BeanFactory 和 ProxyFactoryBean类

评分

参与人数 1技术分 +1 收起 理由
潘才新 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
赞一个,赫赫
回复 使用道具 举报

谢,看你发帖要来北京,来了没
回复 使用道具 举报
aspoMAN 发表于 2013-9-22 17:06
谢,看你发帖要来北京,来了没

来了啊。在传智,你呢
回复 使用道具 举报
潘才新 发表于 2013-9-22 18:53
来了啊。在传智,你呢

我在家,走流程呢,不知道能不能赶上云6。你培训完了还是还没培训
回复 使用道具 举报
强悍,膜拜
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马