日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > [置頂] 【SSH進階之路】Spring的IOC逐層深入――為什么要使用IOC[實例講解](二)

[置頂] 【SSH進階之路】Spring的IOC逐層深入――為什么要使用IOC[實例講解](二)

來源:程序員人生   發布時間:2015-01-28 08:38:56 閱讀次數:3733次

      上篇博客【SSH進階之路】Spring簡介,搭建Spring環境――輕量級容器框架(1),我們簡單的介紹了Spring的基本概念,并且搭建了兩個版本的Spring開發環境,但是我們剩下了Spring最核心的兩大技術:IoC和AOP,沒有深入介紹。從這篇博文開始,我們開始逐一的深入學習Spring的兩個核心。Spring目前最引人注視的地方,就是IOC=Inversion  OControl(控制反轉)或DI=Dependence  Injection(依賴注入)的設計思想。

      這篇博客我們使用傳統方式(即不使用Spring)來實現1個添加用戶的實例,再同理使用Spring實現添加用戶的實例,對照學習IoC的概念,和為何使用IoC等等,最后,簡單總結。下面我們開始:

 

傳統方式:

 

客戶端:

public class Client { public static void main(String[] args){ //由我們的利用程序負責服務(對象)定位,主動發起查找 UserManager userManager = new UserManagerImpl(); userManager.addUser("jiuqiyuliang", "123456"); } }

業務邏輯層:

UserManager接口:添加用戶的方法

public interface UserManager { public void addUser(String userName,String password); }

UserManager實現

public class UserManagerImpl implements UserManager{ @Override public void addUser(String userName, String password) { //由我們的利用程序負責服務(對象)定位,主動發起查找 //UserDao userDao = new UserDao4MysqlImpl(); UserDao userDao = new UserDao4OracleImpl(); userDao.addUser(userName, password); } }

數據訪問層:

UserDao接口:添加用戶的方式

public interface UserDao { public void addUser(String userName,String password); }

UserDao兩種實現(Mysql和Oracle):傳統方式使用配置文件,然后使用工廠來創建相應的對象(即我們常常說的配置文件+抽象工廠+反射,1會兒我們再看看Spring創建對象的方式)

public class UserDao4MysqlImpl implements UserDao{ @Override public void addUser(String userName, String password) { //打印訪問Mysql的相干信息 System.out.println("UserDao4MysqlImpl.addUser"); } }
public class UserDao4OracleImpl implements UserDao{ @Override public void addUser(String userName, String password) { //打印訪問Oracle的相干信息 System.out.println("UserDao4OracleImpl.addUser"); } }

運行效果圖:



       看到上面的代碼,非常的熟習,由于我們平時常常使用。但是問題來了,在業務邏輯層的實現中,UserDao有多種不同的實現方式,例如Mysql和Oracle,UserManager要依賴于UserDao的具體實現。并且對象是由我們自己負責創建的,我們主動的發起了1個查找,要依賴于1種數據庫的實現。此時我們的UserManager就和UserDao的具體實現牢牢的耦合在1起了我們再看客戶端,我們要使用UserManager,同業務邏輯層1樣,還得需要我們自己負責主動查找UserManager的具體實現。

 

      我們可以發現:傳統方式,對象和對象之間產生嚴重的依賴關系,耦合度非常高而且依賴關系都寫死在了代碼里,項目不容易修改和保護,必須要改代碼

 

      下面我們使用Spring方式改造實例,實現一樣的功能,讓Spring管理我們的對象,看看Spring是怎樣創建對象和描寫對象之間依賴關系的。

 

Spring方式:

 

項目的包圖:

         

客戶端:

public class Client { public static void main(String[] args){ BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); //到IOC容器中獲得UserManager UserManager userManager = (UserManager) factory.getBean("userManager"); //UserManager使用UserDao,在配置文件已有依賴關系 userManager.addUser("jiuqiyuliang", "123456"); } }

業務邏輯層:
 UserManager實現:

public class UserManagerImpl implements UserManager{ private UserDao userDao; //使用構造方式賦值 public UserManagerImpl(UserDao userDao) { this.userDao = userDao; } @Override public void addUser(String userName, String password) { userDao.addUser(userName, password); } }

Spring的配置文件:

<?xml version="1.0" encoding="UTF⑻"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans⑷.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop⑷.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx⑷.1.xsd"> <!-- 使用spring管理對象的創建,還有對象的依賴關系 --> <bean id="userDao4Mysql" class="com.tgb.spring.dao.UserDao4MysqlImpl"/> <bean id="userDao4Oracle" class="com.tgb.spring.dao.UserDao4OracleImpl"/> <bean id="userManager" class="com.tgb.spring.manager.UserManagerImpl"> <!-- (1)userManager使用了userDao,Ioc是自動創建相應的UserDao實現,都是由容器管理--> <!-- (2)在UserManager中提供構造函數,讓spring將UserDao實現注入(DI)過來 --> <!-- (3)讓spring管理我們對象的創建和依賴關系,必須將依賴關系配置到spring的核心配置文件中 --> <constructor-arg ref="userDao4Oracle"/> </bean> </beans>

 

       由于其他地方的代碼和效果圖,同上,不再浪費大家的帶寬。

   

       對照傳統的實現方式,再看客戶端和UserManager,我們可以發現:通過IoC或DI,我們只需要通過簡單的配置,而無需任何代碼就能夠指定UserManager中所需的UserDao的具體實現。UserManager只需利用容器注入的UserDao實例,完成本身的業務邏輯,而不用關心具體實現來自哪、由誰實現。換句話說:我們不再需要自己負責創建對象,保護對象的依賴關系,這些都有Spring替我們完成了。

     

傳統方式和Spring方式對照:

 

      傳統方式:決定使用哪個具體實現是由利用程序負責的,在編譯階段就肯定了。

      Spring方式:調用類只依賴接口,而不依賴具體的實現類,減少了耦合。控制權交給了容器,在運行期才由容器決定將具體的實現動態的“注入”到調用類的對象中。這也是使用IoC的根本緣由。

 

       現在我們對IoC有了基本認識,我們再理解1下IoC的概念。

 

IoC

     

      IoC(Inversion of Control),控制反轉,用白話來說,就是由容器控制程序之間的關系,而非傳統實現中,由程序代碼直接控制。這也就是所謂“控制反轉”的概念所在:控制權由利用代碼中轉到了外部容器,控制權的轉移,就是所謂反轉。

  

IoC的優缺點

       

優點:

1、把對象的創建和依賴關系定義在了XML文件中,我們改變子類的實現變得異常簡單。

2、控制反轉減輕了對象之間的耦合度,減輕了對象之間的依賴關系,增加了系統的靈活性,可保護性,和可移植性等等。

 

缺點:

1、生成對象的方式變復雜了(事實上操作還是挺簡單的),對不習慣這類方式的人,會覺得有些別扭和不直觀。

2、創建對象由于使用了反射技術,在效力上有些消耗。但相對IoC提高的保護性和靈活性來講,這點消耗是微不足道的,除非某對象的生成對效力要求特別高。

 

 總結

 

     IoC使得面向對象的世界更加簡單,面向接口編程成了可能。

 

     引言:下篇博文,我為大家轉載了1篇深入理解IoC原理的博文,相當簡單,通俗易通。以后,我為大家準備了1篇依賴注入幾種類型對照的博文,快馬加鞭ing,敬請期待。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久久天堂国产精品女人 | 在线中文字幕视频 | 亚洲一区在线电影 | 亚洲国产网站 | 91视频导航 | 成人欧美一区二区三区在线播放 | 国产精品久久久久久久久久免费看 | 成人视屏在线观看 | a中文字幕在线 | 国内成人自拍视频 | 欧美日韩99 | 99中文字幕 | 亚洲免费毛片 | 婷婷婷婷色 | 中文字幕av一区二区 | 亚洲一区二区黄色 | 激情欧美一区二区三区中文字幕 | 国产一区久久久 | 三级av| 日韩欧美在线一区二区三区 | 玖玖玖视频 | 久久精品1 | 日韩欧美一区二区三区在线视频 | 欧美在线性爱视频 | 亚洲精品久久久久 | 91综合在线 | 99久久爱| 亚洲一区二区三区在线电影 | 黄色高清美女免费网站 | 热久久久久久久 | 国产欧美久久一区二区三区 | 一区二区三区欧美在线 | 一区二区三区国产视频 | 中文字幕日本在线 | 自拍视频在线 | 免费中文字幕在线 | 性做久久久久久免费观看欧美 | 精久久 | 亚洲精品高清视频 | 国产精品亚洲综合 | 一级激情视频 |