Spring Java配置
我發(fā)現(xiàn)許多我認(rèn)識(shí)的Spring開(kāi)發(fā)人員仍然不了解或使用Spring Java Configuration(aka JavaConfig)。 Spring 3.0引入了此功能,該功能使Spring可以完全用Java進(jìn)行配置-不再需要XML! 我真的很喜歡使用JavaConfig,因?yàn)?#xff0c;好吧,它是Java! 這意味著它具有Java類型安全和IDE支持的所有優(yōu)點(diǎn):
- 打字錯(cuò)誤生成編譯錯(cuò)誤–無(wú)需等待加載時(shí)間即可找到XML錯(cuò)字
- IDE重構(gòu)工具將自動(dòng)更新JavaConfig,因?yàn)樗浅R?guī)Java
- 可以使用IDE自動(dòng)導(dǎo)入功能來(lái)代替在XML中鍵入完全限定的類名
- IDE向下鉆取功能
- IDE自動(dòng)完成功能
- 我想您明白了,它適用于Java。
上面的某些功能確實(shí)內(nèi)置在具有Spring支持的更高級(jí)的IDE中,但是最好不要依賴自定義IDE Spring支持來(lái)獲得這些功能。 編譯時(shí)檢查對(duì)我來(lái)說(shuō)是一個(gè)很大的檢查。 我經(jīng)常重構(gòu)代碼,更改字段名或移動(dòng)或重命名Java文件經(jīng)常會(huì)破壞XML Spring配置。 當(dāng)然,在部署應(yīng)用程序并收到Spring初始化錯(cuò)誤之前,我通常不會(huì)意識(shí)到這一點(diǎn)。 現(xiàn)在,當(dāng)我重構(gòu)代碼時(shí),IDE會(huì)自動(dòng)更新JavaConfig引用,因?yàn)樗皇瞧胀ǖ腏ava。 另外,如果我忘記使用IDE的重構(gòu)工具,那么JavaConfig中仍然會(huì)出現(xiàn)編譯錯(cuò)誤,該錯(cuò)誤會(huì)在部署前提醒我出現(xiàn)問(wèn)題。
讓我展示一個(gè)有關(guān)XML配置如何轉(zhuǎn)換為JavaConfig的基本示例。 首先,XML配置:
<beans><bean id="PersonService" class="com.codetutr.PersonService"><constructor-arg ref="personDao" /></bean><bean id="personDao" class="com.codetutr.dao.PersonDao"><property name="endpoint" value="localhost" /></bean> </beans>轉(zhuǎn)換為JavaConfig:
package com.codetutr.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.codetutr.dao.PersonDao; import com.codetutr.service.PersonService;@Configuration public class AppConfig {@Beanpublic PersonService personService() {return new PersonService(personDao());}@Beanpublic PersonDao personDao() {PersonDao personDao = new PersonDao();personDao.setEndpoint("localhost");return personDao;}}這是一個(gè)非常簡(jiǎn)單的一對(duì)一轉(zhuǎn)換。 每個(gè)<beans>文檔都轉(zhuǎn)換為帶有@Configuration注釋的Java類。 每個(gè)<bean>元素都轉(zhuǎn)換為帶有@Bean注釋的單個(gè)方法。 方法的名稱與bean ID相對(duì)應(yīng)。 要在JavaConfig中引用另一個(gè)bean,只需調(diào)用所需bean的方法(請(qǐng)參見(jiàn)上面的personService )。
我對(duì)Spring JavaConfig的另一種觀察是,使用構(gòu)造函數(shù)注入而不是setter注入更為自然-因?yàn)樗鼘?dǎo)致了單行方法。 對(duì)我來(lái)說(shuō)這是一個(gè)優(yōu)點(diǎn),因?yàn)槲彝ǔ8矚g構(gòu)造函數(shù)注入。 如果一個(gè)類需要某些依賴項(xiàng)才能正常運(yùn)行,我更喜歡在構(gòu)造函數(shù)中要求它們。 這樣,我可以確保將類初始化為有效狀態(tài)。 我注意到,無(wú)論出于什么原因,構(gòu)造器注入似乎在XML配置中很少使用。 也許constructor-arg太難記了? 我不知道,但是我喜歡JavaConfig似乎可以帶回一些東西。
現(xiàn)在,為了引導(dǎo)JavaConfig Application Context,Spring提供了一個(gè)新的ApplicationContext實(shí)現(xiàn): AnnotationConfigApplicationContext 。 它的用法與使用ClassPathXmlApplicationContext用法相同:
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); PersonService personService = ctx.getBean(PersonService.class);或者,如果您在Web應(yīng)用程序中:
<servlet><servlet-name>myServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></init-param><init-param><param-name>contextConfigLocation</param-name><param-value>com.codetutr.config.AppConfig</param-value></init-param><load-on-startup>1</load-on-startup> </servlet>請(qǐng)注意,可以為上面的contextConfigLocation參數(shù)傳遞包名或類名。
或者最后,如果您使用的是Servlet 3的Java配置:
public class SpringWebAppInitializer implements WebApplicationInitializer {@Overridepublic void onStartup(final ServletContext servletContext) throws ServletException {final AnnotationConfigWebApplicationContext springContext = new AnnotationConfigWebApplicationContext();springContext.register(AppConfig.class);final ServletRegistration.Dynamic springServlet = servletContext.addServlet("myServlet", new DispatcherServlet(springContext));springServlet.setLoadOnStartup(1);springServlet.addMapping("/*");} } 這篇文章只是刮擦了JavaConfig的表面。 我將在后續(xù)文章中介紹如何從其他@Configuration類或XML文件導(dǎo)入bean以及如何使用自定義名稱空間。 另外,請(qǐng)查看我的文章有關(guān)如何使用JavaConfig設(shè)置Spring-MVC應(yīng)用程序 。
翻譯自: https://www.javacodegeeks.com/2013/04/spring-java-configuration.html
總結(jié)
以上是生活随笔為你收集整理的Spring Java配置的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 平板电脑怎么截图啊(平板上怎么截图)
- 下一篇: Java EE CDI bean范围