首頁>技術>

1、回顧(一)

上節我已經基本說明了耦合,以及在一些業務上是怎麼發生的,實際上我們要理解一個思想,傳統的EJB開發模式,因為受到了很多很多的框架硬性約束,web容器的約束

導致了程式碼的可讀性,可移植和可擴充套件性變得不好,所以有這些解耦的思想,我們才會在03年spring的廣泛流行!

回顧上節末尾:我們是不是遺留了一個問題,如果我們在工廠中,每次有一個新的物件,我們就需要手動的加一個對應的getBean方法,可重用性大大降低,所以我們稱下面的程式碼,叫做

---------------------------簡單工廠------------------------------------

/**

* 定義一個bean工廠,專門生產普通物件

*/

public class BeanFactory {

private static Properties properties = new Properties();

//1.載入配置檔案

static {

InputStream resourceAsStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties");

try {

properties.load(resourceAsStream);

resourceAsStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

public static UserDao getBean(String key){

// 2.使用key獲得value

String className = properties.getProperty(key);

// 3.使用value利用反射技術建立物件

try{

return (UserDao) Class.forName(className).newInstance();

}catch(Exception e){

e.printStackTrace();

return null;

}

}

}

那麼為了避免多個不同的物件在實際生產業務中,程式碼的繁重,我們將這個簡單工廠,改造成通用工廠

/**

* 定義一個bean工廠,專門生產普通物件

*/

public class BeanFactory {

private static Properties properties = new Properties();

//1.載入配置檔案

static {

InputStream resourceAsStream = BeanFactory.class.getResourceAsStream("/applicationContext.properties");

try {

properties.load(resourceAsStream);

resourceAsStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

// 來個物件就要在工廠建立一個

// public static UserDao getMysqlBean() {

// return new UserDaoMysqlImpl();

// }

//

// public static UserDao getOracleBean() {

// return new UserDaoOracleImpl();

// }

// 來個物件就要在工廠建立一個,冗餘程式碼太多

// public static UserDao getBean(String key){

// // 2.使用key獲得value

// String className = properties.getProperty(key);

// // 3.使用value利用反射技術建立物件

// try{

// return (UserDao) Class.forName(className).newInstance();

// }catch(Exception e){

// e.printStackTrace();

// return null;

// }

// }

/**

* 通用工廠方法,不必要一個新來物件就要建立一個getBean

* @param key

* @return

*/

public static Object getBean(String key){

Object ret = null;

String className = properties.getProperty(key);

// 3.使用value利用反射技術建立物件

try{

ret = Class.forName(className).newInstance();

}catch(Exception e){

e.printStackTrace();

}

return ret;

}

}

這樣的話,是不是我們只需要在配置檔案中這麼寫:

userDao=com.chenxin.gmall.user.demo.dao.UserDaoSqlServerImpl

userService=com.chenxin.gmall.user.demo.service.UserServiceImpl

在需要建立物件的地方,我們只需要強制轉換下:

UserDao userDao = (UserDao) BeanFactory.getBean("userDao");

......

我們想在哪裡生成一個介面的實現類,只要你存在這個介面的實現,我們就可以定義在配置檔案中,然後在你需要生成的地方呼叫即可!

6
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 宇宙第一 IDE 到底是誰?