丢弃重口味的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即可

时间: 2024-10-11 10:29:52

丢弃重口味的xml配置--spring4用groovy配置bean(转)的相关文章

spring boot基础之servlet3.0和spring4.x零配置相关文章

Servlet 3 + Spring MVC零配置:去除所有xml Spring4中的WebApplicationInitializer理解 servlet3注解替代web.xml 利用WebApplicationInitializer配置SpringMVC取代web.xml servlet3.0 ServletContainerInitializer初始化器 servlet 3.0笔记之servlet的动态注册 一个基于注解配置的Web项目的启动流程分析 SpringMVC4零配置 servl

SpringMVC之application-context.xml,了解数据库相关配置

上一篇SpringMVC之web.xml让我们了解到配置一个web项目的时候,如何做基础的DispatcherServlet相关配置,作为SpringMVC上手的第一步,而application-context.xml则让我们了解到如何将数据库信息加载到项目中,包含关键的数据库连接信息.sqlSessionFactory.事务等关键因素. ①.xml内容 <?xml version="1.0" encoding="UTF-8"?> <beans x

.NET Core采用的全新配置系统[6]: 深入了解三种针对文件(JSON、XML与INI)的配置源

物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigurationSource和IniConfigurationSource. [ 本文已经同步到<ASP.NET Core框架揭秘>之中] 目录一.FileConfigurationSource  & FileConfigurationProvider 二.JsonConfigurationSou

【spring in action 学习--springMVC搭建】在不使用web.xml的情况下,配置Srping MVC工程

一.Spring MVC 简介 DispatcherServlet是Spring MVC的核心,他负责将请求路由到其他的组件中. 在servlet3.0 之前,传统的搭建Spring MVC工程时,像DispatcherServlet这样Servlet都会配置在web.xml文件中. 在servlet3.0 中对功能进行了增强, 所以不需要将DispatcherServlet配置在web.xml中. 二. 相关代码 1.webconfig---> 这个文件中主要是用来几个功能:a.启用 Spri

深入了解三种针对文件(JSON、XML与INI)的配置源

深入了解三种针对文件(JSON.XML与INI)的配置源 物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigurationSource和IniConfigurationSource. [ 本文已经同步到<ASP.NET Core框架揭秘>之中] 目录一.FileConfigurationSource  & FileConfigurationPr

spring4.1.6配置quartz2.2.1(maven)

参考:http://blog.csdn.net/lk_blog/article/details/11744621 依赖: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://

设置XML文件的自动格式化配置

设置XML文件的自动格式化配置: 在Eclipse下编辑XML文件时可以像Java文件一样进行格式化.不过,默认的格式化设置效果不太理想,尤其是标签属性较多时.通过以下设置可以达到一个相对理想的效果:Window -> Preferences -> XML ->XML Files -> Editor : 1.1设置每行宽度Line width   设定为80到100个字符. 1.2标签的每个属性都单独一行显示:选中Split multiple attributes each on 

struts.xml常用元素配置和结果集配置

1.struts.xml的常用元素配置介绍 (1).<package/>元素:表示包整个概念,和代码中的package没有关系: 仅仅是从逻辑上将<action>,<interceptors/>等元素做模块管理. package的常见的属性: a>name:逻辑分包的名字,应用中有多个<package>元素,得保证name属性的唯一性. 因为该名字可以用来别别的<package>元素所继承. b>extends:比如A<pack

Spring4.0支持Groovy配置

介绍 前一段时间观注了一下Spring4.0的一些特性,其中就有对Groovy配置的支持.由于暂时还没有非常深入的研究,所以举个小例子来说明一下如何支持Groovy配置. package shuai.study.spring.bean; public class Gasoline { private int capacity = 0; public Gasoline(int capacity) { this.capacity = capacity; } public int getCapacit