使用 JavaConfig 替换 Spring 的 XML 配置
在这个博客上,有关Spring的文章正变成一种趋势,我应该申请一个SpringSource的位置。由于我在使用XML 为Spring做配置时的固执,我的同事时常会骂我。是的,他看起来似乎是2000年代的,但XML确实具有一定的优势:
XML的唯一问题是你要等到运行时的时候来发现Bean里面的错误或者其他愚蠢的问题。另一方面,使用Spring的IDE插件(或者其他整合了Spring Tools Suite)就能帮助到你(处理这方面问题)。
在XML和直接注解在一个Bean类之间有一个有趣的选择,它就是JavaConfig,它是从V3.0后嵌入到Spring里的一个以前的独立项目。它用Java的编译时检查整合了XML的去耦的优势。JavaConfig能够等价看成是XML文件,不过它只是用Java编写的。它的完整文档在网上可以看到,而这篇文章帮助你开始使用JavaConfig。让我们把下面的XML文件移植为一个JavaConfig来作为一个例子吧:
view source?print?01<?xml version="1.0" encoding="UTF-8"?>02<beans xmlns="http://www.springframework.org/schema/beans"03????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"04????xsi:schemaLocation="http://www.springframework.org/schema/beans05??06http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">07??08????<bean id="button" class="javax.swing.JButton">09????????<constructor-arg value="Hello World" />10????</bean>11??12????<bean id="anotherButton" class="javax.swing.JButton">13????????<property name="icon" ref="icon" />14????</bean>15??16????<bean id="icon" class="javax.swing.ImageIcon">17????????<constructor-arg>18????????????<bean class="java.net.URL">19??????????????<constructor-arg value="http://morevaadin.com/assets/images/learning_vaadin_cover.png" />20????????????</bean>21????????</constructor-arg>22????</bean>23</beans>下面是等价的文件:
view source?print?01import java.net.MalformedURLException;02import java.net.URL;03??04import javax.swing.Icon;05import javax.swing.ImageIcon;06import javax.swing.JButton;07??08import org.springframework.context.annotation.Bean;09import org.springframework.context.annotation.Configuration;10??11@Configuration12public class MigratedConfiguration {13??14????@Bean15????public JButton button() {16??17????????return new JButton("Hello World");18????}19??20????@Bean21????public JButton anotherButton(Icon icon) {22??23????????return new JButton(icon);24????}25??26????@Bean27????public Icon icon() throws MalformedURLException {28??29????????URL url = new URL("http://morevaadin.com/assets/images/learning_vaadin_cover.png");30??31????????return new ImageIcon(url);32????}33}用法很简单:使用@Configuration注解主要的类个别的生成方法就用@Bean来注解。恕我直言,唯一的缺点是它使用了自动连接。除此之外,它做的不错。
请注意,在Web工程中,Web部署文件应该增加以下几行:
?
view source?print?1<context-param>2????<param-name>contextClass</param-name>3????<param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>4</context-param>5<context-param>6????<param-name>contextConfigLocation</param-name>7????<param-value>com.packtpub.learnvaadin.springintegration.SpringIntegrationConfiguration</param-value>8</context-param>这篇文章Maven/Eclipse下的源码 下载
更多:
Java-based container configuration?documentationAnnotationConfigWebApplicationContextJavaDoc@ContextConfigurationJavaDoc?(to configure Spring Test to use JavaConfig)?
?
?
?