溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

spring中的工廠原理簡單模擬

發(fā)布時間:2020-07-03 12:49:25 來源:網(wǎng)絡(luò) 閱讀:843 作者:奔跑吧爽爽 欄目:開發(fā)技術(shù)

spring中的工廠原理簡單模擬

package service;

import dao.User;
import factory.Factory;

public class Test {
// private static User user = new UserImpl();//耦合度太高

private static User user = (User) Factory.getIntence().getBean("userdao");
public static void main(String[] args) {
user.saveUser();
}
}

package dao;

public interface User {
public void saveUser();
public void deleteUser();
public void updateUser();
public void findUser();
}

import dao.User;
public class UserImpl implements User{
public void saveUser() {
System.out.println("保存用戶");
}
public void deleteUser() {
System.out.println("刪除用戶");
}
public void updateUser() {
System.out.println("更新用戶");
}
public void findUser() {
System.out.println("查找用戶");
}
}

package factory;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.ResourceBundle;

public class Factory {
private static Factory factory;
//ResourceBundle只能讀取資源文件 注意:只能讀不能寫 只能讀資源文件
//只能讀取類的路徑下的
private static ResourceBundle bundle = ResourceBundle.getBundle("bean");//參數(shù)是資源文件的位置,按照報名.資源文件名來寫
private static Map<String,Object> map = new HashMap<String,Object>();//在spring中相當于web容器 用來保證dao層的對象唯一
static{
factory=new Factory();
try {
Enumeration<String> keys = bundle.getKeys();
while(keys.hasMoreElements()){
String key = keys.nextElement();//得到一個key
String classpath = bundle.getString(key);
//使用反射創(chuàng)建對象實例
Object object = Class.forName(classpath).newInstance();
map.put(key, object);
}
} catch (Exception e) {
throw new RuntimeException();
}
}
private Factory(){
}
public static Factory getIntence(){
return factory;
}
/** 為了防止多個線程同時調(diào)用這個方法出現(xiàn)線程安全問題


/
public synchronized Object getBean(String param){
/Object bean = null;
try {
//根據(jù)參數(shù),在資源文件中獲取類的全路徑
String classpath = bundle.getString(param);
//使用反射 創(chuàng)建對象
bean = Class.forName(classpath).newInstance();
return bean;
} catch (Exception e) {
throw new RuntimeException(e);
}
/
return map.get(param);
}
}

spring的核心ioc和aop 其中ioc的意思就是放棄創(chuàng)建下一層對象的權(quán)利,把這個權(quán)利交給spring工廠 上類中factory

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI