2006-05-25日 反射在构造函数上的应用

原创 2006年05月25日 15:39:00

1.   研究一下如下方法    class.forName().newInstance()

如果我需要写一个需要操作数据库的操作,然而各家公司所用的数据库不一样,有用oracle,DB2或者mysql,那怎么样做才能做到更改方便,适应能力强的程序呢?

我们可以把数据库需要加载的类通过properties文件指明,然后提供一个facade类,其实也就是一个接口,它有加载数据库的通用方法,然后用reflection机制的classforName和newInstance方法来动态加载,呵呵,这里似乎也借鉴了spring通过xml文件来做反转控制的理念

public class MainApplication {
//...
private Properties props;
private CustomerDatabase custDB;
//...
public synchronized CustomerDatabase createDBFacade() {
if ( custDB == null ) {
try {
String dbClassName
= props.getProperty( "db.class",
"com.wci.app.StubCustomerDB");
Class cls = Class.forName(dbClassName);
custDB = (CustomerDatabase) cls.newInstance();
}
catch (ClassNotFoundException ex) {
// ...
}
catch (InstantiationException ex) {
// ...
}
catch (IllegalAccessException ex) {
// ...
}
}
return custDB;
}
}

这里要说明的是class对象的newInstance等同于用没有参数的构造函数去实例化一个对象,简单吧,呵呵

 

2.嗯,还有别的要注意的 Construct类

还是看看我写的一个测试类吧,这里有1.和2的例子

import java.lang.reflect.*;
public class NewInstanceEqualsNoArgumentConstruction
{
 private int var1;
 private int var2;
 public NewInstanceEqualsNoArgumentConstruction()
 {
 }
 public NewInstanceEqualsNoArgumentConstruction(int a,int b)
 {
  var1=a;
  var2=b;
 }
 public void setVar1(int c)
 {
  var1=c;
 }
 public void setVar2(int c)
 {
  var2=c;
 }
 public int sum()
 {
  return var1+var2;
 }
 public static void greeting()
 {
  System.out.println("这个是没有实例化情况下用class来做到的问号语言,有意思吧,呵呵");
 }
 public static void main(String[] args)
 {   try
  {
  
   /////////////////////////////////////////////////////////////////////////////////////////////////////
      Class c=NewInstanceEqualsNoArgumentConstruction.class;
     Constructor ct=c.getConstructor(new Class[]{int.class,int.class});

   NewInstanceEqualsNoArgumentConstruction m=(NewInstanceEqualsNoArgumentConstruction)ct.newInstance(3,4);
   NewInstanceEqualsNoArgumentConstruction n=(NewInstanceEqualsNoArgumentConstruction)c.newInstance();
   //////////////////////////////////////////////////////////////////////////////////////////////////////
   n.setVar1(1);
   n.setVar2(2);
   System.out.println("和是: "+n.sum());
   System.out.println("有参数的构造函数得到的和是: "+m.sum());
  }
  
  catch(InstantiationException e)
  {
   e.printStackTrace();
  }
  
  catch(IllegalAccessException e)
  {
   e.printStackTrace();
  }
  
  catch(SecurityException e)
  {
   e.printStackTrace();
  }
  
  catch(NoSuchMethodException e)
  {
   e.printStackTrace();
  }
  
  catch(Exception e)
  {
   e.printStackTrace();
  }

 }
}

java反射在spring中的应用

java反射在spring中的应用
  • bawcwchen
  • bawcwchen
  • 2015年01月18日 22:01
  • 729

反射在框架开发中的应用

框架就是有很多牛人在我们还在上小学的时候(不懂程序的时候)给我们做了一套开发的架子,以后我们在应用开发时。就可以直接用这套架子,只需要把我们自己的一点东西加进来就可以了。就好比房子,开发商为我们提供了...
  • chen5287603
  • chen5287603
  • 2011年05月23日 01:10
  • 744

Java反射机制的应用-模拟Spring的依赖注入

采用Java的反射机制,结合XML文档解析,模拟Spring中的setter方法依赖注入。
  • fullStackChenZF
  • fullStackChenZF
  • 2017年07月12日 08:17
  • 458

框架使用java反射好处

一个Java程序可能有很多类构成。当程序运行时,JVM会从类路径中将这些类装入内存并根据代码的指示实例化出对象。但这一过程对于程序员而言似乎是透明的,只要简单的 书写如下的代码: Foo foo = ...
  • woailuo453786790
  • woailuo453786790
  • 2015年10月28日 19:35
  • 850

[转]反射在工厂模式上的应用

1.前言   之前写过一篇设计模式之简单工厂(Factory method),在这篇文章的“7.可配置的简单工厂实例”中,客户端没有传入参数,这是因为在factory中已经定义了需要读取的配置文件。...
  • baiyunxiaoxiao_chen
  • baiyunxiaoxiao_chen
  • 2012年08月30日 10:31
  • 463

android 反射的应用

android 反射应用 分类: MTK专栏 android应用开发 2013-07-20 17:52 56人阅读 评论(0) 收藏 举报 目录(?)[+] ...
  • pi9nc
  • pi9nc
  • 2013年07月21日 13:04
  • 4442

java反射的应用(Hibernate)

java反射的应用(Hibernate)          Hibernate是一个屏蔽了JDBC,实现了ORM的java框架,利用该框架我们可以抛弃掉繁琐的sql语句而是利用Hibernate中...
  • u013366812
  • u013366812
  • 2016年07月23日 16:28
  • 404

Java反射在开发中的一些应用

有的时候,我们在开发的时候,由于要考虑到代码的重用性,自然而然的就会想到用反射来处理一些问题。 借用:java反射机制应用场景 一文 反射机制实现:  1)导出文件(1-4)  2)结果集在页面的显示...
  • xiaobangsky
  • xiaobangsky
  • 2014年01月07日 17:26
  • 3162

Java反射在Android中的应用,以及注意事项

Java反射在Android中的应用,以及注意事项 在【玩转SQLite系列】(七)打造轻量级ORM工具类SQLiteDbUtil操作数据库 这篇文章当中,我封装了一个轻量级的数据库ORM工...
  • u010785585
  • u010785585
  • 2016年11月30日 09:04
  • 1931

猫的高级条件反射

好久没去姥姥家了 今天又去了姥姥家,又见到了她家那只纯黑色的猫 上午我们吃完饭,收拾了东西。 我便开始在桌子上写作业(我把作业也一起带去了) 我写只写着 那只猫突然跳到了另一个椅子上。 有借势跳到...
  • StarkKung
  • StarkKung
  • 2016年05月25日 22:08
  • 171
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2006-05-25日 反射在构造函数上的应用
举报原因:
原因补充:

(最多只允许输入30个字)