丢弃重口味的xml配置--spring4用groovy配置bean(转)
spring4之前,bean的配置可以主要分为两种方式,一种是使用基于xml,个人非常讨厌这种方式,因为明明一件很简单的事,放在xml中就会多了不少繁杂的信息。另一种方式,是从spring3.0开始,spring提供了是基于java的配置,相比于xml的配置方式,看起来会好一点儿。而在几天前release的spring4.0中,我们可以用groovy作为spring的配置文件啦!比起最早的基于xml配置,使用groovy会更加灵活,而且干扰信息会更少。比起基于java的配置,groovy配置还要更加精炼!
这篇博客就对现有的xml,java配置方式进行回顾,然后再简单的展示spring4提供的groovy配置方式。本篇博客的代码在github上:https://github.com/kiwiwin/spring4-bean-demo
例子中,我们使用gradle引入依赖:
compile("org.springframework:spring-core:4.0.0.RELEASE",
"org.springframework:spring-context:4.0.0.RELEASE")
下面展示一个很简单的例子,一场足球赛,有homeTeam主队和awayTeam客队,这两个bean是通过构造函数传入。另外还有homeScore和awayScore表示主队和客队分别得到的分数,通过property的方式传入。
下面比较xml、java、groovy三种配置方式
1.使用xml进行bean配置
football-match-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="footballMatch" class="org.kiwi.spring.groovy.FootballMatch">
<constructor-arg ref="homeTeam"/>
<constructor-arg ref="awayTeam"/>
<property name="homeScore" value="3"/>
<property name="awayScore" value="1"/>
</bean> <bean id="homeTeam" class="org.kiwi.spring.groovy.FootballTeam">
<constructor-arg value="Manchester United"/>
</bean> <bean id="awayTeam" class="org.kiwi.spring.groovy.FootballTeam">
<constructor-arg value="AC Milan"/>
</bean> </beans>
虽然我们的IDE已经足够聪明能够帮我们生成xml的各种标签,但是这样的东西看起来确实还是让人觉得不爽。不过如果你真的还是很喜欢这种,那我只能说你开心就好。
2.使用java进行bean配置
首先定义bean:
FootballMatchConfig.java
package org.kiwi.spring.groovy; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class FootballMatchConfig {
@Bean
public FootballMatch footballMatch() {
final FootballMatch footballMatch = new FootballMatch(homeTeam(), awayTeam());
footballMatch.setHomeScore(3);
footballMatch.setAwayScore(1);
return footballMatch;
} @Bean
public FootballTeam homeTeam() {
return new FootballTeam("Manchester United");
} @Bean
public FootballTeam awayTeam() {
return new FootballTeam("AC Milan");
}
}
然后从context中定义java配置文件的位置:
football-match-java-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan
base-package="org.kiwi.spring.groovy" />
</beans>
比起基于纯粹xml的bean配置,基于java的bean配置不再受限于xml本身。配置本身更清晰。
3.使用groovy进行bean配置
FootballMatchConfig.groovy
import org.kiwi.spring.groovy.FootballMatch
import org.kiwi.spring.groovy.FootballTeam beans {
homeTeam(FootballTeam, "Manchester United")
awayTeam(FootballTeam, "AC Milan") footballMatch(FootballMatch, homeTeam, awayTeam) {
homeScore = 3
awayScore = 1
}
}
简单吧!谁看到这种简单的配置方式不会心动呢?
与之前的ApplcationContext不同,为了支持基于groovy的bean配置。spring4中提供了新的正对Groovy的
ApplicationContext:GenericGroovyApplicationContext。 public class FootballApp {
public static void main(String[] args) {
final GenericGroovyApplicationContext context = new GenericGroovyApplicationContext("FootballMatchConfig.groovy");
final FootballMatch footballMatch = (FootballMatch) context.getBean("footballMatch");
System.out.println(footballMatch.display());
}
}
重口味的程序员可能觉得这是吃饱了没事儿撑的用groovy进行bean配置。但是想下maven和gradle,maven基于xml,gradle基于groovy。同样的配置,在gradle中显得十分精炼,同时,因为gradle使用了groovy这样一种语言,而不是xml这种文件,使其更加灵活,在定义task方面会更加的方便。
在这篇博客中,虽然没有写太多基于groovy配置更加强大的方面,但是简洁是显而易见的。简洁就是美。
我们可以非常保守的想一下,在我们所有可以使用xml的地方,其最终都会被其他简洁的语言所替代。
温馨提示:
在初次在IntelliJ中尝试使用groovy进行bean配置时,发生过找不到配置文件的问题。这是因为groovy的配置文件后缀是.groovy。IntelliJ的编译器会把它当成是源文件,而不是配置文件。所以需要在Compiler设置中的Resource Patterns那一栏中去掉groovy对应的!?*.groovy即可
丢弃重口味的xml配置--spring4用groovy配置bean(转)的更多相关文章
- Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC 配置校验器
Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(J ...
- .NET Core采用的全新配置系统[6]: 深入了解三种针对文件(JSON、XML与INI)的配置源
物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...
- Java Web的web.xml文件作用及基本配置(转)
其实web.xml就是asp.net的web.config一个道理. 说明: 一个web中完全可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的. web.xml文件是用来 ...
- maven pom.xml加载不同properties配置[转]
可以参考http://www.openwebx.org/docs/autoconfig.html 1.pom.xml =========================== <!-- 不同的打包 ...
- maven pom.xml加载不同properties配置
1.pom.xml =========================== <!-- 不同的打包环境配置: test=开发/测试测试环境, product=生产环境; 命令行方式: mvn c ...
- Spring4.0支持Groovy配置
介绍 前一段时间观注了一下Spring4.0的一些特性,当中就有对Groovy配置的支持.因为临时还没有很深入的研究.所以举个小样例来说明一下怎样支持Groovy配置. package shuai.s ...
- 深入了解三种针对文件(JSON、XML与INI)的配置源
深入了解三种针对文件(JSON.XML与INI)的配置源 物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonCon ...
- JSP/JSF从web.xml中取出context-param的配置信息
JSP/JSF从web.xml中取出context-param的配置信息. 应用场景:我们配置了项目的版本信息,想让他显示在页面上,如: <context-param><!-- ## ...
- 关于什么是SpringMVC,和SpringMVC基于xml配置、注解配置、纯注解配置
首先我们先要了解一下,什么是SpringMVC? SpringMVC是Spring框架内置的MVC的实现.SpringMVC就是一个Spring内置的MVC子框架,也就是说SpringMVC的相关包都 ...
随机推荐
- 简体中文 — ANSI Common Lisp 中文版
简体中文 - ANSI Common Lisp 中文版 简体中文¶
- linux route命令的使用详解
route命令用于显示和操作IP路由表.要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现.在Linux系统中,设置路由通常是 为了解决以下问题:该Linu ...
- Web Api集成Swagger
WebApi集成Swagger 1.新建一个WebApi空项目 2.新建一个Person实体类: public class Person { public int ID { get; set; } p ...
- JAVA进阶----主线程等待子线程各种方案比较(转)
创建线程以及管理线程池基本理解 参考原文链接:http://www.oschina.net/question/12_11255?sort=time 一.创建一个简单的java线程 在 Java 语言中 ...
- TkinterGUI - 初识Tkinter
前言 近期有写一个简单GUI程序的点子,具体写什么就不说了,但一个要求就是有跨平台的功能. 确切的讲,是我希望这个程序写好后能同时在Windows和Linux下运行,而且要方便随时修改. 对于编程语言 ...
- [置顶] C++学习书单
关于C++的书太多了,很容易让人没有头绪.一直想整理下,把这些书列个书单出来,直到今天才动手.希望我的经验能给后来的初学者一点帮助. 1.<C++程序设计教程> 钱能 很多学校把这本书选做 ...
- poj1243(经典dp)
题目链接:http://poj.org/problem?id=1243 题意:让你猜一个物品的价格,猜低了或者猜高了都会提示你.G,L,表示你有G次机会猜一个数,如果猜错了,G会减少1次,如果你的错误 ...
- hdu4004(二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4004 大致题意 二分最大跳跃能力,判断是否可以在m次内到达对岸! 分析:由于求青蛙最小弹跳能力,所以二 ...
- 字典实体类:DictionaryEntry类
DictionaryEntry类是一个字典集合,主要包括的内容是键/值对.这样的组合方式能够方便地定位数据,当中的"键"具备唯一性,类似于数据库中的"id",一 ...
- vs2008+opencv2.4.9 +win7X64位系统 2.
小编用自身血淋淋的例子,来给大家做个参考,共耗时近2天时间,终于屈服于安装vs2010,然后配置成功了.但是在这个配置成功后,我终于发现了我08配置不成功的原因,写下心得,供各位参考 1.准备工具 v ...