多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > 框架設計 > [置頂] 【SSH進階之路】Spring簡介,搭建Spring環境――輕量級容器框架(一)

[置頂] 【SSH進階之路】Spring簡介,搭建Spring環境――輕量級容器框架(一)

來源:程序員人生   發布時間:2015-01-12 08:59:32 閱讀次數:3737次

      經過對Struts和Hibernate的學習,我們酷寒的冬季(Hibernate),終究迎來了陽光燦爛的春季(Spring)。在系列博客開篇【SSH進階之路】Struts + Spring + Hibernate 進階開端(1),我們介紹了Spring的基本概念,和比較重要的兩大核心IoC和AOP,基本上介紹的比較簡單,1句話帶過。從這篇博客開始,我們開始重新介紹Spring框架的基本理論,并搭建1個簡單的Spring開發環境。
         

Spring是甚么?

 

       Spring是1個集成了許多第3方框架的大雜燴,其核心技術是IOC(控制反轉,也稱依賴注入)和AOP(面向切面編程),所以spring既是1個IoC容器,也是1個AOP框架。知道了甚么是Spring是學習的開端,下面說1下為何使用Spring。

 

為何使用Spring?

 

       我們知道沒有Spring,Struts和Hibernate可以很好的工作,在開篇中我把沒有Spring的架構稱為“獨木橋”,有Spring的架構稱為“陽光大道”。說白了,Spring解決了企業利用開發的復雜性,用基本的javaBean來完成EJB的事情,從大小和開消方向說,Spring都是輕量級的。Spring具有很多的優點:

 

1、使我們的分層更好。

     SSH框架系統從職責上分為4層:表示層、業務邏輯層、數據持久層和域模塊層(實體層)。

     

      從上圖我們可以看到Spring處于業務邏輯層,擔負連接Struts和Hibernate橋梁的角色。系統的全部層次關系可以1目了然。

 
2、對象管理更好。

      從上圖,我們看到Spring將Transactions、Session和業務層服務都放到了業務邏輯層來管理。系統的條理變得更加清晰,不但使持久化層的職責更加單1,而且提高了系統的靈活性。 
 

3、AOP

       面向切面編程,AOP讓開發人員創建非行動性的關注點,并將它們插入到利用代碼紅。公共服務(比如日志、持久性、事務等)就能夠就能夠分解成方面并利用到域對象上,同時不會增加域對象的對象模型的復雜性。

 

4、IoC

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

 

用處

 

      對Spring的用處很多,但是Spring的核心和經典我們可以簡化為3部份:

1、IoC容器可以將對象之間的依賴關系交由Spring管理,進行控制。

2、AOP方便進行面向切面編程,是oop的擴大,想加甚么功能直接加。

3、能夠集成各種優秀的框架,struts、Hibernate等等,還有很多,不再逐一羅列。

 

架構圖

 

         

 

       相信你能看出來這是Spring的架構圖,Spring包括了許多的特性,其實都包括在6個模塊中:Core、AOP、DAO、ORM、JEE和Web,其實我們對它們其實不陌生,當你學習或使用Spring時,最少已使用了3部份的內容:DAO、ORM(對象關系映照)、Web。下面我們逐一看1下:

1、DAO

      DAO框架封裝了所有的數據庫訪問的操作,Spring提供了對DAO的支持,還有模版jdbc,進1步封裝了jdbc。不論是Spring jdbc還是各種ORM框架(Hibernate、iBatis、MyBatis),它們都對JDBC做了進1步的封裝,使數據訪問層的操作更加靈活、易用。固然,它們也各有各的優缺點,在項目技術選型時非常重要的1項。同時,Spring還可以集成第3方的框架。

 

2、ORM

      Spring提供了對ORM框架的支持,能夠集成大多主流的ORM框架。JPA是1個java持久化注解的規范,Hibernate是1種對JPA的實現。TopLink是Oracle的1個ORM框架;JDO是sun公司的1個規范。OJB是appach的。IBatis不是嚴格意義上的ORM,ORM1般是對云數據的映照,描寫類和屬性,它是基于SQL的映照器。由于ORM框架層見疊出,種類繁多,大家可以自行查1下它們是哪一個公司的產品,和各自優缺點等等。

 

3、Web

       Spring不但具有自己的表示層SpringMVC,同上面1樣,它還也能夠支持第3方的表示層框架struts,webwork,和1些第3方的工具。

 

        這篇博文,我們剩下Spring最核心的3部份,后面的博文我會逐一詳細介紹。下面我們搭建1個Spring的添加用戶的開發環境:

 

搭建Spring開發環境

  
1、下載SpringFramework,并解緊縮到指定目錄。我使用的是Spring3.2.9,使用哪一個版本無所謂只要將jar加入到項目便可。

2、在IDE中新建1個java項目,并將Spring所需jar加入到項目中,我所用IDE為MyEclipse。

3、Spring采取Apache common_logging,并結合Apache log4j作為日志輸出組件。為了在調試進程中能視察到Spring的日志輸出,在CLASSPATH中新建log4j.properties配置文件,內容以下:

<span style="font-size:12px;">log4j.rootLogger=info, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n</span>

4、提供Spring配置文件applicationContext.xml。

5、編寫代碼

 

配置完成以后,目錄結構以下圖所示:

     

           

UserDao接口

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

UserDao的實現

UserDao4MysqlImpl

public class UserDao4MySqlImpl implements UserDao { public void addUser(String userName,String password){ System.out.println("UserDao4MySqlImpl.addUser()"); System.out.println("userName="+userName); System.out.println("password="+password); } }

UserDao4Oracelmpl

<span style="font-size:12px;">public class UserDao4OracleImpl implements UserDao { public void addUser(String userName,String password){ System.out.println("UserDao4OracleImpl.addUser()"); System.out.println("userName="+userName); System.out.println("password="+password); } }</span>

UserManager接口

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

UserManager的實現

import com.liang.spring.dao.UserDao; public class UserManagerImpl implements UserManager { //定義1個成員變量,使用構造方式賦值 private UserDao userDao; public UserManagerImpl(UserDao userDao) { this.userDao = userDao; } /** * set注入 * @param userDao */ // public void setUserDao(UserDao userDao) { // this.userDao = userDao; // } @Override public void addUser(String userName, String password) { userDao.addUser(userName, password); } }

客戶端

import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.liang.spring.manager.UserManager; public class Client { /** * @param args */ public static void main(String[] args) { //由我們的利用程序負責服務(對象)定位 //這是1個組裝進程,userManager用userDao,這類關系是用程序描寫的,現在用配置文件描寫 //UserManager userManager = new UserManagerImpl(new UserDao4MySqlImpl()); //userManager.addUser("張3", "123"); //BeanFactory是1個接口,有不同的實現,ClassPathXmlApplicationContext是對beanFactory的實現 //把applicationContext.xml讀進來 BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml"); //ApplicationContext都實現了beanFactory的接口 //ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml"); //getBean加產品標識,相當與userManager的實現,再轉化為userManager的接口 UserManager userManager =(UserManager)factory.getBean("userManager"); userManager.addUser("jiuqiyuliang", "123456"); } }

Spirng的配置文件:applicationContext.xml

<?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⑵.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop⑵.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx⑵.0.xsd"> <!-- id是唯1性標識,不能重--> <!-- 相當于工廠1樣--> <bean id="userDao4Mysql" class="com.liang.spring.dao.UserDao4MySqlImpl"></bean> <bean id="userDao4Oracle" class="com.liang.spring.dao.UserDao4OracleImpl"></bean> <!-- userManager使用userDao接口,userDao使用構造函數將依賴關系給userManager--> <!-- userManager依賴哪寫dao,IoC容器不但是1個工廠,它提供了管理依賴的能力。 --> <bean id="userManager" class="com.liang.spring.manager.UserManagerImpl"> <!-- 使用的構造函數,描寫了1個種依賴關系。userManager依賴于Mysql的實現 容器提供了查找能力,找到以后new好,以后會給userManager,放到userManager的進程 為DI,依賴注入。(主動注入)--> <constructor-arg ref="userDao4Mysql"></constructor-arg> <!--或 <constructor-arg ref="userDao4Oracle"></constructor-arg> --> </bean> </beans>

      在上面的配置文件中可以自由的切換各種數據庫的實現,DAO層的靈活性可想而知。

 

項目的測試結構:


 

 大家對不明白的地方看代碼中的注釋便可,我給大家提供兩個版本的源碼:

     Spring2與源碼

     Spring3.2.9與源碼

 

總結

 

      最后,今天先介紹這么多,我們對Spring的認識才剛剛開始,僅是冰山1角。對Spring,我更喜歡用下面的8個字形容:海納百川,有容乃大。

      下篇博文介紹IoC的幾種注入方式,謝謝關注。

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产日韩精品一区二区在线观看播放 | 伊人影院在线观看 | 欧美精品videosfree720 | 成人国产激情福利久久精品 | 黄色小说校园春色 | 欧美精品日韩一区二区三区 | 国产小情侣 | 手机在线观看视频 | 婷婷综合缴情亚洲五月伊 | 日本不卡一区二区三区在线观看 | 亚洲jizzjizz在线播放久 | 国产35页| 一区二区三区在线免费观看视频 | 免费观看做网站爱 | 亚洲精品免费网站 | 涩涩视频www在线观看入口 | 老司机午夜在线视频免费 | japanese年轻护士出水 | 视频在线网站 | 欧美毛片免费观看 | 国产精品成人观看视频国产 | 伊人福利网 | 欧美黄色片在线观看 | 老司机福利在线免费观看 | 国产一级一片 | 大香网伊人久久综合网2020 | 成人精品久久 | 噜噜噜噜噜视频在线观看 | 久久大香伊人中文字幕 | 国产成人乱码一区二区三区 | 日本在线无| 久久人人澡人人爽人人爱 | 欧美一级毛片免费高清aa | 国产成人啪午夜精品网站男同 | 欧美黄色a| 国产精品网站在线观看 | 国产国产成人人免费影院 | 亚洲码在线观看 | 久久大香伊蕉在人线国产昨爱 | 亚洲成a人片在线v观看 | 韩国美女爽快一级毛片黄 |