`
JavaSam
  • 浏览: 935812 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用 JavaConfig 替换 Spring 的 XML 配置

 
阅读更多

在这个博客上,有关Spring的文章正变成一种趋势,我应该申请一个SpringSource的位置。由于我在使用XML 为Spring做配置时的固执,我的同事时常会骂我。是的,他看起来似乎是2000年代的,但XML确实具有一定的优势:

  1. 配置集中化,所有的组件并不是分散的,因此使你对beans有一个很好的概览,而且他们在同一个地方进行连接。
  2. 如果你需要分割文件,没问题,Spring可以帮你实现。然后(Spring)会通过内部<import>标签进行重新组合或者外部上下文文件进行聚合。
  3. 只有XML的配置可以显示的装配—而不是自动装配。有时候,后者(自动装配)对于我自己的口味有点过于神奇。表面上看很简单,却隐藏了复杂性:我们不仅需要在按类型和按名称自动装配之间进行切换,但更重要的是,在所有合格的转义,但经验更加丰富的Spring开发人员选择相关bean的策略。配置文件似乎让这变得更容易,但相对还是陌生的且了解的不够。
  4. 最后,但同等重要的,XML对Java文件是完全适用的:在两者之间没有耦合,因此类可以再多个不同的上下文配置文件中使用。

XML的唯一问题是你要等到运行时的时候来发现Bean里面的错误或者其他愚蠢的问题。另一方面,使用Spring的IDE插件(或者其他整合了Spring Tools Suite)就能帮助到你(处理这方面问题)。

在XML和直接注解在一个Bean类之间有一个有趣的选择,它就是JavaConfig,它是从V3.0后嵌入到Spring里的一个以前的独立项目。它用Java的编译时检查整合了XML的去耦的优势。JavaConfig能够等价看成是XML文件,不过它只是用Java编写的。它的完整文档在网上可以看到,而这篇文章帮助你开始使用JavaConfig。让我们把下面的XML文件移植为一个JavaConfig来作为一个例子吧:

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/beans
05   
06 http://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>

下面是等价的文件:

01 import java.net.MalformedURLException;
02 import java.net.URL;
03   
04 import javax.swing.Icon;
05 import javax.swing.ImageIcon;
06 import javax.swing.JButton;
07   
08 import org.springframework.context.annotation.Bean;
09 import org.springframework.context.annotation.Configuration;
10   
11 @Configuration
12 public class MigratedConfiguration {
13   
14     @Bean
15     public JButton button() {
16   
17         return new JButton("Hello World");
18     }
19   
20     @Bean
21     public JButton anotherButton(Icon icon) {
22   
23         return new JButton(icon);
24     }
25   
26     @Bean
27     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部署文件应该增加以下几行:

 

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 documentation
  • AnnotationConfigWebApplicationContextJavaDoc
  • @ContextConfigurationJavaDoc (to configure Spring Test to use JavaConfig)

 

 

 

 

0
0
分享到:
评论

相关推荐

    Spring实战之XML与JavaConfig的混合配置详解

    大家都知道Spring的显示配置方式有两种,一种是基于XML配置,一种是基于JavaConfig的方式配置。那么下这篇文章主要给大家分别介绍如何在JavaConfig中引用XML配置的bean以及如何在XML配置中引用JavaConfig,需要的...

    5.SpringBoot快速上手CRUD.zip

    SpringBoot2.1.0 , MyBatisPlus3.0.6 , LayUI2.4.5 ,MySQL5.5.15, 以及SpringBoot默认支持的模板引擎Thymeleaf3.0.4,使用以上技术,了解SpringBoot怎么集成以上框架技术,怎么完成XML配置的替换等… SpringBoot...

    新版本SpringCloud2学习手册

    使用Zookeeper来替换Eureka 25 Consistency(一致性), 数据一致更新,所有数据变动都是同步的 Availability(可用性), 好的响应性能 Partition tolerance(分区容忍性) 可靠性 28 客户端负载均衡器 29 客户端负载...

    spring.net中文手册在线版

    Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上。 第一章 序言 第二章 简介 2.1.概述 2.2.背景 2.3.模块 2.4.许可证信息 2.5.支持 第三章 背景 3.1.控制反转 第...

    spring security 参考手册中文版

    配置 - spring-security-config.jar 26 LDAP - spring-security-ldap.jar 26 ACL - spring-security-acl.jar 26 CAS - spring-security-cas.jar 26 OpenID - spring-security-openid.jar 26 测试 - spring-security-...

    product-flow

    -用JavaConfig替换大多数XML配置文件以更好地维护 -仅保留XML文件作为Webflow的描述器,从而合理地更好地理解业务流程 -在JPA查询中使用多种方法,可以灵活地满足各种业务需求并有效地进行编程 -与JSP相比,展示了...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而...

    Spring Security 中文教程.pdf

    2.2.1. 配置web.xml 2.2.2. 最小 &lt;http&gt; 配置 2.2.2.1. auto-config 包含了什么? 2.2.2.2. 表单和基本登录选项 2.2.3. 使用其他认证提供器 2.2.3.1. 添加一个密码编码器 2.3. 高级web特性 2.3.1. ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    而Spring Boot 是Spring 主推的基于“习惯优于配置”的原则,让你能够快速搭建应用的框架,从而使得Java EE 开发变得异常简单。 《JavaEE开发的颠覆者: Spring Boot实战》从Spring 基础、Spring MVC 基础讲起,从而...

    spring-config:演示项目展示了如何使用基于类的注释配置引导 Spring + MVC + JPA + Apache CXF RESTful 服务项目。 没有 beans.xml!

    弹簧配置演示项目显示如何使用基于类的注释配置引导 Spring + MVC + JPA 项目。 项目仍然使用 web.xml 文件。 这可以由实现 org.springframework.web.WebApplicationInitializer 的类替换。 见技术栈:春天: 弹簧芯...

    SpringSecurity 3.0.1.RELEASE.CHM

    2.2.1. 配置web.xml 2.2.2. 最小 配置 2.2.2.1. auto-config包含了什么? 2.2.2.2. 表单和基本登录选项 2.2.3. 使用其他认证提供器 2.2.3.1. 添加一个密码编码器 2.3. 高级web特性 2.3.1. Remember-Me认证 ...

    Spring Security-3.0.1中文官方文档(翻译版)

    2.2.1. 配置web.xml 2.2.2. 最小&lt;http&gt; 配置 2.2.2.1. auto-config 包含了什么? 2.2.2.2. 表单和基本登录选项 2.2.3. 使用其他认证提供器 2.2.3.1. 添加一个密码编码器 2.3. 高级web 特性 2.3.1. ...

    Spring面试题

    用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate()验证后选择将...

    spring-scopes:自定义 Spring Bean 范围

    这可以通过 Java Config 或 XML Config 来完成,如下所示。 在这两个示例中, scope-name字符串应替换为您将用于引用该范围的字符串,并且CustomScope类应是您添加的范围的类。 Java 配置示例 @Configuration ...

    idea-wildcard:描述intellij idea中移动通配符spring config问题的示例项目

    在idea中打开applicationContext.xml,它是一个spring配置文件,你会看到“classpath*:com/yongpoliu/bean/internal/**/module-*.xml” 将 applicationContext.xml 拖到另一个目录,然后您将看到该想法所做的文件...

    java微信公众号MVC开发框架

    jwx是开源的java公众号开发MVC框架,基于spring配置文件和微信消息或事件注解,通过微信上下文处理一个或多个微信公众号服务请求。目的主要有两个,其一生封装微信请求xml消息为java实体对象,将返回对象转换为xml...

    spring-configs-battle:Spring Config Battle演讲的代码

    测试将$ {projectName}替换为groovy / xml / java : 带有curl -H "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:8080/${projectName}/importData JsonParser curl...

    java面试题

    答:不一定,如果在配置中你也使用了fetch属性的话此时lazy就会失效。 Hibernate数据库标识与主键之间的认识? 答:标识是为了方便和简介映射文件,主键是为了让数据不会重复。 为什么每次请求都要创建一个Action...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    现有的 Java EE 应用 ...由于 BlazeDS 需要将 Java 接口 FlexService 暴露给 Flex 前端,因此,我们在配置文件 remoting-config.xml 中将 FlexService 接口声明为一个服务: 清单 6. 定义 flexService 服务 ...

Global site tag (gtag.js) - Google Analytics