Java通過工廠、Map容器創(chuàng)建對象的方法
一、通過工廠+反射+配置文件創(chuàng)建對象
通過工廠+反射+配置文件獲取對象
/**
* @Author: Promsing
* @Date: 2021/3/7 - 10:09
* @Description: 通過使用工廠+配置文件+反射實現(xiàn)創(chuàng)建對象
* @version: 1.0
*/
public class AbsFactory {
//聲明一個變量(多例模式,每次通過工廠都會創(chuàng)建一個不同的實例)
private static Object obj;
public static Object createType(String createName){
//自動釋放資源--使用絕對路徑
try( InputStream is =new FileInputStream("src\\Factory.properties")) {
//配置文件類
Properties pro=new Properties();
pro.load(is);
// System.out.println(pro.size());
//獲取參數(shù)
String property = pro.getProperty(createName);
obj = Class.forName(property).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
return obj;
}
}
}
配置文件如下
//以Key,Value的形式,主要Value要寫全類名,不要加分號 accountService=com.dynamic.service.Impl.AccountServiceImpl accountDao=com.dynamic.dao.Impl.AccountDaoImpl
二、通過Map容器間接獲取對象
通過Map容器間接獲取對象,與Spring中的IOC容器類似,采用立即加載策略
/**
* @Author: Promsing
* @Date: 2021/3/19 - 11:50
* @Description: 模仿IOC容器,將創(chuàng)建的對象放在Map集合中,加載該類時會讀取配置文件中,將類放入Map中
* @version: 1.0
*/
public class BeanFactory {
//定義一個properties對象
private static Properties props;
//定義一個Map,用于存放我們創(chuàng)建的對象(單例,當類加載之后就有了對象,之后從Map中獲?。?
private static Map<String,Object> beans;
//容器
static {
try {
props=new Properties();
//將bean.properties放在了resources路徑下
InputStream is=BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
props.load(is);
//實例化容器
beans=new HashMap<String,Object>();
//從配置文件中獲取所有key值
Enumeration<Object> keys = props.keys();
while (keys.hasMoreElements()){
//取出每一個key
String key = keys.nextElement().toString();
//根據(jù)key獲取value
String path = props.getProperty(key);
Object value=Class.forName(path).newInstance();
//放入容器中
beans.put(key,value);
}
}catch (Exception e){
e.printStackTrace();
}
}
//提供一個訪問Map容器的入口
public static Object getInstance(String name){
return beans.get(name);
}
}
配置文件內容如下
accountService=com.dynamic.service.Impl.AccountServiceImpl accountDao=com.dynamic.dao.Impl.AccountDaoImpl
以上兩部分歸到根上都是通過反射創(chuàng)建對象,JDK8在反射創(chuàng)建對象時,做了很大的增強,提高了性能。其實Spring IOC與以上實現(xiàn)創(chuàng)建對象的原理是一致的,Spring IOC做的就是這件事情,只是它封裝的更好而已(當然還有其他的增強,O(∩_∩)O哈哈~)。
到此這篇關于Java通過工廠、Map容器創(chuàng)建對象的方法的文章就介紹到這了,更多相關java創(chuàng)建對象內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot配置Profile實現(xiàn)多環(huán)境支持
這篇文章主要介紹了SpringBoot配置Profile實現(xiàn)多環(huán)境支持操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
基于springboot微信公眾號開發(fā)(微信自動回復)
這篇文章主要介紹了基于springboot微信公眾號開發(fā)(微信自動回復),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11
SpringBoot+Mybatis實現(xiàn)Mapper接口與Sql綁定幾種姿勢
通常我們在使用Mybatis進行開發(fā)時,會選擇xml文件來寫對應的sql,然后將Mapper接口與sql的xml文件建立綁定關系,然后在項目中調用mapper接口就可以執(zhí)行對應的sql,感興趣的可以學習一下2021-09-09

