做项目的时候遇到一个问题,就是需要动态加载类并实例化对象.现在分享给大家!
另外说句题外话,Class.forName("").newInstance();用于工厂真的是挺好的,有用到的时候你可以试试!
简单介绍下:Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。
上代码的说:
先是父类代码:
1 package com.test.entity; 2 3 public class ItemBase { 4 public String toString(){ 5 return "ItemBae"; 6 } 7 8 }
子类代码:
package com.test.entity; public class ItemA extends ItemBase{ private String name; private String age; @Override public String toString(){ return "A的name:"+name+",A的age:"+age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
package com.test.entity; public class ItemB extends ItemBase{ private String name; private String age; @Override public String toString(){ return "B的name:"+name+",B的age:"+age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
工厂代码:
package com.test.factory; import com.entity.test.entity.ItemBase; public class Factory { public static ItemBase createObj(String className) throws Exception{ return (ItemBase)Class.forName(className).newInstance(); }
用法
public class Test { public static void main(String[] args) { ItemBase itemBase=(ItemBase)Factory.createObj("com.test.entity.ItemA"); System.out.println("A:"+itemBase.toString()); itemBase=(ItemBase)Factory.createObj("com.test.entity.ItemB"); System.out.println("B"+itemBase.toString()); } }
这里只是个示范,你可以去把你的类配置到xml去动态的读取,只需改XML你就能得到你想要的类`~用法很多`~ 我只是简单的演示下