使用BeanFactory實(shí)現(xiàn)創(chuàng)建對(duì)象
本文實(shí)例為大家分享了BeanFactory實(shí)現(xiàn)創(chuàng)建對(duì)象的具體代碼,供大家參考,具體內(nèi)容如下
說明:
其作用是減少層與層之間的依賴。
實(shí)現(xiàn)步驟:
編寫2個(gè)類(Student,Teacher)再編寫beans.properties文件,接著編寫B(tài)eanFactory類,最后編寫測(cè)試類BeanTest。
參考代碼如下:
/**
*beans.properties文件的內(nèi)容(位于與src平級(jí)的config資源包下)
*/
Student=com.xxx.generic.demo.Student
Teacher=com.xxx.generic.demo.Teacher
/**
*BeanFactory類的參考代碼
*/
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
public class BeanFactory {
private BeanFactory() {
}
private static Map<String, String> beans = new HashMap<>();
static {
InputStream is = BeanFactory.class.getClassLoader().getResourceAsStream("beans.properties");
Properties prop = new Properties();
try {
prop.load(is);
Enumeration<String> keys = (Enumeration<String>) prop.propertyNames();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
String value = prop.getProperty(key);
beans.put(key, value);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
public static <T> T getBean(Class<T> clazz) {
T t = null;
String className = clazz.getSimpleName();
Set<String> keys = beans.keySet();
for (String key : keys) {
if (key.equals(className)) {
String value = beans.get(key);
try {
t = (T) Class.forName(value).newInstance();
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}
return t;
}
}
/**
*BeanTest類參考代碼
*/
public class BeanTest {
public static void main(String[] args) {
Student s = BeanFactory.getBean(Student.class);
System.out.println(s + ":我是" + s.getClass().getSimpleName() + "的一個(gè)對(duì)象。");
Teacher t = BeanFactory.getBean(Teacher.class);
System.out.println(t + ":我是" + t.getClass().getSimpleName() + "的一個(gè)對(duì)象。");
}
}
運(yùn)行結(jié)果如下:

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
深入解析java中的靜態(tài)代理與動(dòng)態(tài)代理
本篇文章是對(duì)java中的靜態(tài)代理與動(dòng)態(tài)代理進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-10-10
SpringBoot對(duì)接clerk實(shí)現(xiàn)用戶信息獲取功能
Clerk是一個(gè)提供身份驗(yàn)證和用戶管理的服務(wù),可以幫助開發(fā)者快速集成這些功能,下面我們就來看看如何使用Spring?Boot對(duì)接Clerk實(shí)現(xiàn)用戶信息的獲取吧2025-02-02
完全解析Java編程中finally語句的執(zhí)行原理
這篇文章主要深度介紹了Java編程中finally語句的執(zhí)行原理,細(xì)致講解了finally在異常處理中的流程控制作用,需要的朋友可以參考下2015-11-11
關(guān)于Mybatis實(shí)體別名支持通配符掃描問題小結(jié)
MyBatis可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫中的記錄,這篇文章主要介紹了Mybatis實(shí)體別名支持通配符掃描的問題,需要的朋友可以參考下2022-01-01
Java實(shí)現(xiàn)圖片上傳至服務(wù)器功能(FTP協(xié)議)
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)圖片上傳至服務(wù)器功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
實(shí)現(xiàn)了基于TCP的Java Socket編程實(shí)例代碼
這篇文章主要介紹了基于TCP的Java Socket編程實(shí)例代碼,有需要的朋友可以參考一下2013-12-12

