亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Spring新特性之Java Config在Web開發(fā)中的應(yīng)用

        2017-03-09 15:13:58楊瑞東王云峰張海英
        關(guān)鍵詞:程序員配置文件實(shí)例

        楊瑞東,王云峰,張海英

        (1. 中國科學(xué)院微電子研究所 新一代通信射頻芯片技術(shù)北京市重點(diǎn)實(shí)驗(yàn)室,北京 100029; 2. 中國科學(xué)院大學(xué),北京 100049)

        Spring新特性之Java Config在Web開發(fā)中的應(yīng)用

        楊瑞東1,2,王云峰1,張海英1

        (1. 中國科學(xué)院微電子研究所 新一代通信射頻芯片技術(shù)北京市重點(diǎn)實(shí)驗(yàn)室,北京 100029; 2. 中國科學(xué)院大學(xué),北京 100049)

        為提高項(xiàng)目開發(fā)的效率,對Spring新特性Java Config在Web開發(fā)中的應(yīng)用作了深入研究。以傳統(tǒng)的使用XML配置Spring的方式為對比,對新特性Java Config的使用方法和其優(yōu)勢作了介紹。以實(shí)際案例的形式具體描述了Spring中XML配置方式和Java Config配置的方式。結(jié)果表明,Java Config在Web項(xiàng)目開發(fā)中具有操作簡單、編譯器錯(cuò)誤檢查、更符合程序員編程規(guī)范等優(yōu)勢。使用Java Config的方式還可以配合Servlet3.0完全去掉傳統(tǒng)Web項(xiàng)目中固有的web.xml文件。Java Config將成為Web開發(fā)的流行趨勢。

        Spring;Java Config;容器;注解

        Abstract: In order to improve the efficiency of project development, intensive study of the application of Spring’s new feature Java Config in Web development is made. By contrasting with the conventional way of configuring Spring with XML, the usage method and advantage of Spring’s new feature Java Config are introduced. In the form of actual cases, Spring’s XML config and Java Config are described. As a result, Java Config in Web development has some advantages such as simple operation, compiler error checking, programming specification. The way of Java Config combined with Servlet3.0 can get rid of conventional file web.xml. Java Config will be the main trend of the Web development in the future.

        Key words:Spring; Java Config; container; annotation

        0 引言

        Spring是目前Web開發(fā)中非常流行的一個(gè)容器框架,是進(jìn)行對象管理、對象關(guān)聯(lián)、解耦的一個(gè)中間層框架[1]。它的主要功能是創(chuàng)建Java bean并維護(hù)bean與bean之間的關(guān)系。在傳統(tǒng)的使用Spring的項(xiàng)目中都是采用外部XML文件的方式進(jìn)行配置,利用XML文件來管理bean之間的依賴關(guān)系[2]。由于XML文件和程序是分離的,而且XML文件沒有集成工具語法檢查,隨著項(xiàng)目不斷增大,對XML的管理就越來越復(fù)雜,特別容易出錯(cuò)。

        Spring在新的版本中引入了使用Java Config進(jìn)行配置的方式,這種配置方式使用Java類的形式來代替?zhèn)鹘y(tǒng)使用的XML文件,使用Java類進(jìn)行配置編譯器可以在編譯期間檢查錯(cuò)誤,這大大提高了程序開發(fā)的效率,而且使用Java編程的方式進(jìn)行Spring配置更符合程序員的編程風(fēng)格。利用Java Config進(jìn)行Spring項(xiàng)目的配置是目前使用Spring的一個(gè)新的思路,相對于使用XML進(jìn)行配置,使用Java Config的方式更加簡化,程序員不需要頻繁地在Java代碼和XML文件之間進(jìn)行切換,而且也可以在一定程度上減少語法錯(cuò)誤的可能性。

        1 Web應(yīng)用中使用XML配置Spring

        在Web項(xiàng)目中使用Spring框架時(shí),不需要手動(dòng)去創(chuàng)建Spring容器,而是通過外部配置文件聲明式地創(chuàng)建Spring容器,可以在web.xml文件中進(jìn)行Spring容器的配置[3]。

        Spring容器需要隨著Web應(yīng)用的啟動(dòng)而啟動(dòng),這可以利用ServletContextListener來實(shí)現(xiàn)。Spring為開發(fā)者提供了ServletContextListener的一個(gè)實(shí)現(xiàn)類ContextLoaderListener,這個(gè)類作為Listener會在創(chuàng)建時(shí)默認(rèn)自動(dòng)去查找WEB-INF/applicationContext.xml文件。所以如果Spring的配置文件只有一個(gè)而且名字命名為applicationContext.xml,只需要在web.xml中進(jìn)行如下配置:

        org.springframework.web.context.ContextLoaderLister

        如果Spring的配置文件命名為其他的名字或者配置文件不止一個(gè),則需要用元素來進(jìn)行Spring配置文件名的指定。ContextLoaderListener加載時(shí)會查找名為contextConfigLocation的參數(shù),所以在配置時(shí)需要將配置為contextConfigLocation。配置代碼如下所示。

        contextConfigLocation

        /WEB-INF/serviceContext.xml,/WEB-INF/actionContext.xml,/WEB-INF/daoContext.xml

        org.springframework.web.context.ContextLoaderLister

        在項(xiàng)目的web.xml文件中,如果開發(fā)者沒有通過contextConfigLocation指定配置文件,則Spring會自動(dòng)在類路徑下查找applicationContext.xml文件,如果有contextConfigLocation,則Spring利用該參數(shù)確定配置文件;如果無法找到合適的配置文件,則Spring將無法正常初始化。

        Spring初始化完成并且正常啟動(dòng)后,定義在Spring配置文件中的bean就會被實(shí)例化[4]。這里以單個(gè)配置文件applicationContext.xml為例來介紹在Spring容器中如何定義并初始化bean。

        定義三個(gè)類,分別是Person類、Car類、Company類。Person類具有Car類和Company類的引用,類定義如下:

        public class Car{

        private String name;

        //省略get/set方法

        }

        public class Company{

        private String name;

        //省略get/set方法

        }

        public class Person{

        private Car car;

        private Company company;

        //省略get/set方法

        }

        要在Spring容器中初始化這三個(gè)類,需要在applicationContext.xml中進(jìn)行配置。以下代碼說明了上面三個(gè)類在上下文XML中bean的定義。

        這樣Spring容器在啟動(dòng)的時(shí)候,容器內(nèi)就會實(shí)例化Person、Car、Company這三個(gè)類,并且三個(gè)類中的屬性也會自動(dòng)地注入進(jìn)去。在Person類中使用屬性car和company時(shí)就不用單獨(dú)去創(chuàng)建對象,Spring已經(jīng)自動(dòng)進(jìn)行了實(shí)例的創(chuàng)建,而且默認(rèn)情況下Spring創(chuàng)建的實(shí)例都是單例的[5]。如果需要將實(shí)例修改為非單例模式,開發(fā)者可以在Spring的配置文件applicationContext.xml中進(jìn)行設(shè)置。

        2 Web應(yīng)用中使用Java Config配置Spring

        相對傳統(tǒng)使用XML進(jìn)行配置的方式,Spring新推出了一種基于Java Config進(jìn)行配置的方式[6]。在這種配置方式里丟棄了傳統(tǒng)的Spring配置文件applicationContext.xml,甚至加上Servlet3.0的支持,連Web項(xiàng)目中的web.xml都可以省略。

        2.1在Web項(xiàng)目中去掉web.xml

        首先來討論如何去掉傳統(tǒng)Web項(xiàng)目中的web.xml文件。對于一個(gè)傳統(tǒng)的Web應(yīng)用,其部署在Web容器中的時(shí)候,Web容器提供其一個(gè)全局的上下文環(huán)境,這個(gè)上下文就是ServletContext,其為后面的Spring 容器提供了宿主環(huán)境。其次,在web.xml文件中會提供有contextLoaderListener。在Web容器啟動(dòng)時(shí),會觸發(fā)容器初始化事件,此時(shí)contextLoaderListener會監(jiān)聽到這個(gè)事件,Spring框架會初始化一個(gè)啟動(dòng)上下文,這個(gè)啟動(dòng)上下文就稱為根上下文,也就是WebApplicationContext,這是一個(gè)接口類,確切地說,其實(shí)際的實(shí)現(xiàn)類是XmlWebApplicationContext。這個(gè)就是Spring的IoC容器,其對應(yīng)的bean定義的配置文件由web.xml中的context-param標(biāo)簽指定。

        具有Servlet3.0支持的服務(wù)器在啟動(dòng)一個(gè)Web項(xiàng)目的時(shí)候,服務(wù)器會自動(dòng)在項(xiàng)目代碼中掃描實(shí)現(xiàn)了WebApplicationInitializer接口的類,該類屬于Spring,在WebApplicationInitializer接口中有onStartup方法,Spring會自動(dòng)執(zhí)行這個(gè)方法啟動(dòng)Web應(yīng)用。下面的代碼是一個(gè)實(shí)現(xiàn)了WebApplicationInitializer接口的類。

        public class WebAppInitializer implements

        WebApplicationInitializer{

        @Override

        public void onStartup(ServletContext container)

        throws ServletException {

        AnnotationConfigWebApplicationContext rootContext=new AnnotationConfigWebApplicationContext();

        rootContext.register(AppContext.class);

        container.addListener(new ContextLoaderListener(rootContext));

        }

        }

        2.2 Java Config配置Spring

        在傳統(tǒng)的使用XML文件配置的方法中,使用ClassPathXmlApplicationContext 類來加載外部 XML上下文文件。但在使用基于Java Config的方法配置Spring進(jìn)行開發(fā)的時(shí)候,可以使用一個(gè)基于注解配置的AnnotationConfigApplicationContext類。在2.1節(jié)的代碼中,WebAppInitializer類的onStartup方法被執(zhí)行時(shí),AnnotationConfigApplicationContext實(shí)例馬上被創(chuàng)建。AnnotationConfigApplicationContext類其實(shí)是 ApplicationContext 接口的一個(gè)實(shí)現(xiàn),能夠注冊所注解的配置類。在下面的代碼中,使用AppContext類來代替?zhèn)鹘y(tǒng)的XML文件作為配置類來實(shí)現(xiàn)相同的配置效果,這個(gè)類現(xiàn)在用作bean配置的平臺。以下是AppContext類的代碼。

        @Configuration

        public class AppContext {

        @Bean

        public Car car() {

        Car car = new Car();

        return car;

        }

        @Bean

        public Company company() {

        Company company = new Company();

        return company;

        }

        @Bean

        public Person person() {

        Person person = new Person();

        person.setCar(car());

        person.setCompany(company());

        return person;

        }

        }

        在上面的代碼中,以編程的方式將bean定義為基于Java配置的一部分。AppContext類現(xiàn)在就像applicationContext.xml文件一樣充當(dāng)著配置類的作用,這是通過@Configuration這個(gè)注解來實(shí)現(xiàn)的。@Configuration注解位于類的頂端,通過這個(gè)注解Spring會獲知這個(gè)類是一個(gè)擁有bean定義和依賴項(xiàng)的配置類。@Bean注解用于定義一個(gè)bean,位于定義bean并實(shí)例化依賴項(xiàng)的方法頂端。bean的ID就是方法的名字,bean的類型就是方法返回類型。bean的依賴項(xiàng)可以通過bean中的setter方法進(jìn)行設(shè)置。

        創(chuàng)建bean還可以采用annotation(注解)的方式。采用annotation方式進(jìn)行bean的創(chuàng)建就不再需要@Bean注解方式創(chuàng)建bean,Spring會自動(dòng)搜索指定路徑下面的Java類并將這些Java類注冊成為Spring容器中的bean。這些Java類采用注解的方式進(jìn)行標(biāo)記,方便Spring框架進(jìn)行識別。Spring目前主要提供了@Component、@Controller、@Service、@Repository這四種注解來定義一個(gè)bean。目前通過這四種方式定義bean之后所實(shí)現(xiàn)的效果是一樣的。為了使得Spring能夠正確地找到定義之后的這些bean,需要在AnnotationConfigWebApplicationContext的注冊類AppContext中說明掃描的路徑,需要通過注解@ComponentScan("com.spring")來定義掃描路徑,如下面代碼所示:

        @Configuration

        @ComponentScan("com.spring.test")

        public class AppContext {

        }

        和以前的AppContext類相比,在這個(gè)新的AppContext類中少了那些以@Bean注解開頭的定義bean的方法?,F(xiàn)在如果需要定義一個(gè)新的bean,只需要在com.spring.test包下面定義一個(gè)Java類并用@Component、@Controller、@Service、@Repository四個(gè)中的任意一個(gè)注解即可。

        使用注解的方式創(chuàng)建bean時(shí),bean之間的依賴關(guān)系也是用注解的方式實(shí)現(xiàn)。有兩個(gè)注解用來實(shí)現(xiàn)依賴注入,即@Autowired和@Resource,它們既可以寫在字段上,也可以寫在setter方法上。兩者的不同在于@Autowired默認(rèn)使用byType的方式進(jìn)行注入,而@Resource默認(rèn)使用byName的方式進(jìn)行注入。以下代碼是使用以注解@Autowired為例子的方式創(chuàng)建Car、Company、Person三個(gè)bean。

        @Component

        public class Car{

        private String name = “myCar”;

        //省略get/set方法

        }

        @Component

        public class Company{

        private String name = “myCompany”;

        //省略get/set方法

        }

        @Component

        public class Person{

        @Autowired

        private Car car;

        @Autowired

        private Company company;

        //省略get/set方法

        }

        通過上面的方法創(chuàng)建bean并進(jìn)行注入后,Spring容器中就有了Car、Company、Person三個(gè)實(shí)例,并且Person中的屬性car和company也被注入了Car和Company的實(shí)例,整個(gè)Spring容器容納了所需的所有bean,并且形成一個(gè)bean之間的關(guān)系網(wǎng)。需要說明的是,使用annotation創(chuàng)建bean并不是Java Config的特權(quán),使用XML配置Spring的方式同樣也可以使用annotation的方式創(chuàng)建bean,只不過需要在配置文件applicationContext.xml中開啟使用注解,同樣也需要聲明掃描包的范圍。

        3 使用Java Config在Web開發(fā)中的優(yōu)勢

        使用基于Java Config的方式配置Spring框架具有比較大的優(yōu)勢,主要體現(xiàn)在以下三個(gè)方面:

        (1)基于Java Config的配置定義bean是定義在Java類中,這種定義方式符合程序員一貫的編程方式,相對于使用XML定義bean的方式,使用Java Config的方式能夠減少編程思維的跳躍性,程序員不需要在Java類和XML文件中來回切換。

        (2)使用Java類進(jìn)行Spring配置可以在編譯期間檢查錯(cuò)誤,這樣在開發(fā)項(xiàng)目的時(shí)候能夠隨時(shí)發(fā)現(xiàn)錯(cuò)誤并修改錯(cuò)誤。而使用XML配置,只有在運(yùn)行時(shí)才能發(fā)現(xiàn)各種配置及語法的錯(cuò)誤,降低了開發(fā)效率。

        (3)使用Java Config操作簡單。只需要用@Configuration注解JavaConfig類,用每個(gè)方法來表示Bean并使用@Bean注解方法,每個(gè)方法名代表XML配置文件中的name。而在XML的配置中,創(chuàng)建bean以及bean之間的依賴關(guān)系需要通過大量的標(biāo)簽來實(shí)現(xiàn)。

        4 結(jié)論

        Spring在目前的Java Web開發(fā)中具有非常廣泛的應(yīng)用,通過對比傳統(tǒng)的使用XML配置的方式,對Spring新特性Java Config在Web項(xiàng)目開發(fā)中的應(yīng)用進(jìn)行了詳細(xì)的研究。基于XML的配置方式是較為傳統(tǒng)的配置方式,其靈活性好,項(xiàng)目部署后修改也方便[7]。而基于Java Config的配置方式配合使用annotation開發(fā)效率高,不容易出錯(cuò),而且Java Config方式更符合程序員編程的風(fēng)格,是以后Web項(xiàng)目開發(fā)的一種趨勢。

        [1] 李洋,孫永維,許冰,等.基于Ajax,Struts,Hibernate和Spring的J2EE架構(gòu)[J]. 吉林大學(xué)學(xué)報(bào)(信息科學(xué)版),2011,29(6):576-584.

        [2] 胡啟敏,薛錦云,鐘林輝. 基于Spring框架的輕量級J2EE架構(gòu)與應(yīng)用[J]. 計(jì)算機(jī)工程與應(yīng)用,2008,44(5):115-118,133.

        [3] 趙佳. 支持XML配置的IoC微容器設(shè)計(jì)[D]. 天津:天津大學(xué),2007.

        [4] 翟劍錕. Spring框架技術(shù)分析及應(yīng)用研究[D].北京:中國科學(xué)院大學(xué),2013.

        [5] JOHNSON R,田佳偉. Spring framework 2.5介紹(上)[J]. 程序員,2008(1):90-95.

        [6] JOHNSON R,田佳偉. Spring framework 2.5介紹(中)[J]. 程序員, 2008(2):101-106.

        [7] MAK G, LONG J, RUBIO D. Spring Recipes[M]. Springer Apress, 2010.

        Application of Spring′s new feature Java Config in Web development

        Yang Ruidong1,2, Wang Yunfeng1, Zhang Haiying1

        (1. Beijing Key Laboratory of Radio Frequency IC Technology for Next Generation Communications, Institute of Microelectronics of Chinese Academy of Sciences, Beijing 100029, China; 2. University of Chinese Academy of Sciences, Beijing 100049, China)

        TP311

        A

        10.19358/j.issn.1674- 7720.2017.18.008

        楊瑞東,王云峰,張海英.Spring新特性之Java Config在Web開發(fā)中的應(yīng)用[J].微型機(jī)與應(yīng)用,2017,36(18):26-29.

        2017-03-28)

        楊瑞東(1991-),男,碩士,學(xué)生,主要研究方向:Java Web開發(fā)、移動(dòng)醫(yī)療。

        王云峰(1981-),男,博士,副研究員,主要研究方向:便攜式醫(yī)療電子設(shè)計(jì)。

        張海英(1964-),女,博士,研究員,主要研究方向:健康電子醫(yī)療、射頻集成電路。

        猜你喜歡
        程序員配置文件實(shí)例
        為了讓媽媽看懂地圖,一位“野生程序員”做了個(gè)小程序
        提示用戶配置文件錯(cuò)誤 這樣解決
        怎樣成為一名優(yōu)秀程序員
        幼兒100(2020年29期)2020-10-21 06:17:58
        搭建簡單的Kubernetes集群
        互不干涉混用Chromium Edge
        忘記ESXi主機(jī)root密碼怎么辦
        程序員之子
        意林(2017年24期)2018-01-02 22:49:14
        加班
        三月三(2016年6期)2016-06-21 10:25:33
        完形填空Ⅱ
        完形填空Ⅰ
        国产女主播大秀在线观看| 久久天天躁夜夜躁狠狠躁2022 | 欧美日本视频一区| 丝袜美腿诱惑区在线播放| 亚洲成av人综合在线观看| 久久精品免视看国产成人| 国产亚洲精久久久久久无码苍井空 | 日韩精品中文字幕无码专区| 亚洲国产高清在线视频| 久久一区二区三区少妇人妻| 成人无码网www在线观看| 国产精品久久久久免费a∨| 国产 在线播放无码不卡| 美女露出奶头扒开内裤的视频| 国产日韩av在线播放| 亚洲级αv无码毛片久久精品| 久久精品综合国产二区| 五月婷婷六月丁香久久综合| 亚洲性无码一区二区三区| 国产综合激情在线亚洲第一页| 国产精品国产三级国产一地| 极品尤物精品在线观看| 久久久久波多野结衣高潮| 一本无码人妻在中文字幕| 亚洲专区一区二区三区四区五区 | 日本一区二区三区综合视频| 亚洲人成影院在线无码按摩店| 亚洲国产av一区二区三区四区| 国产精品亚洲av国产| 美女很黄很色国产av| 国产一区二区三精品久久久无广告| 国产成+人+综合+亚洲专| 国产精品亚洲二区在线| 艳妇臀荡乳欲伦69调教视频| 99久久久无码国产aaa精品| 激情五月天俺也去综合网| 久久精品人搡人妻人少妇| 免费观看又色又爽又黄的| 亚洲AV无码国产精品久久l| 久久精品国产亚洲av麻豆床戏| 国产男女免费完整视频|