`
youyu4
  • 浏览: 435970 次
社区版块
存档分类
最新评论

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

分享到:
评论

相关推荐

    microservices-spring-boot-groovy:使用 Spring Boot 和 Groovy 构建微服务

    微服务-spring-boot-groovy 使用 Spring Boot 和 Groovy 构建微服务创建这些项目是为了在当地的达拉斯 Groovy Grails 用户组会议上展示微服务架构这些服务使用您需要安装才能开始使用的各种外部服务。 您将需要安装 ...

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本

    apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...

    spring-beans-groovy源码

    Spring框架与Groovy的结合,使得开发者能够利用Groovy的灵活性和便利性来配置Spring Bean,这就是我们今天要探讨的主题——`spring-beans-groovy`模块。 `spring-beans-groovy`是Spring框架的一个组成部分,它允许...

    SpringBoot-Gradle-Maven-Java-Groovy

    3. **Maven**: Maven是另一种流行的Java项目管理和构建工具,它使用XML文件(pom.xml)来定义项目配置和依赖关系。Maven有一套标准的目录结构和生命周期,使得项目构建标准化。然而,对于大型复杂项目,Maven的灵活...

    spring-boot-groovy-config:使用Groovy文件配置Spring Boot应用程序

    spring-boot-groovy-config 使用Groovy文件配置Spring Boot应用程序。 这不仅允许以时髦的DSL方式指定属性,而且还允许(小的)逻辑并在配置内部重复使用(请注意,配置中的复杂逻辑通常不是一个好主意,但是在某些...

    apache-groovy-sdk-3.0.6.zip

    4. **Groovy Ant任务**:Groovy SDK包含了一些Ant任务,允许你在Ant构建脚本中直接使用Groovy,比如运行Groovy脚本、编译Groovy源代码等。 5. **Groovy类库**:Groovy标准库提供了一系列的类和模块,涵盖了集合操作...

    apache-groovy-sdk-4.0.1下载

    4. **docs**目录:可能包含了Groovy的API文档和其他相关文档,帮助开发者理解和使用Groovy API。 5. **src**目录:可能包含Groovy语言的源代码,对于想要深入理解Groovy工作原理或者想要参与贡献的开发者非常有用。...

    groovy-xml-2.2.0-beta-1.zip

    例如,通过Groovy的GPath表达式,开发者可以直接使用类似CSS选择器的方式来获取XML节点。此外,Groovy还允许动态创建XML文档,使得XML的生成更加灵活。结合bb4-common库中的Scala代码,开发者可以在Groovy环境中利用...

    groovy-all-2.4.8.jar

    - Groovy可以无缝集成到Spring框架中,创建Spring Bean和配置文件。 - 与Java EE平台集成,如EJB、JMS、JPA等,提供了更简单的API和更灵活的编程模型。 - 与大数据技术结合,如Apache Kafka、Hadoop等,可以编写...

    groovy-all

    4. **Groovy Scripting**: 支持通过Groovy编写脚本,这些脚本可以直接在Java应用中执行,提供了强大的动态脚本功能。 5. **Groovy GDK (Groovy Development Kit)**: 扩展了Java标准库,提供了更多的便利方法和类,...

    spring-boot-starter-mybatis-spring-boot-1.3.4.zip

    `spring-boot-starter-mybatis`是Spring Boot为MyBatis提供的一个starter,它包含了MyBatis、MyBatis-Spring、以及相关的依赖,使得开发者可以方便地在Spring Boot项目中使用MyBatis。在`pom.xml`或`build.gradle`...

    Groovy在Spring中的简单使用

    Groovy 在 Spring 中的简单使用 Groovy 是一种敏捷的动态语言,用于 Java 虚拟机,可以与 Java 代码无缝集成。它的类 Java 语法对于 Java 开发人员来说很自然,且可以作为纯粹的脚本语言使用。在 Spring 中动态使用...

    wro4j-spring-boot-starter:Spring Boot启动器和wro4j的自动配置(http:alexo.github.iowro4j)

    wro4j-spring-boot-starter ... wro4j-spring-boot-starter需要xml格式的Wro4j模型配置。 如果要使用Groovy版本,则必须扮演自己的WroModelFactory角色,该角色会被自动配置识别。 该入门程序没有引入wro4j-exte

    Grails-开源框架---使用指南.pdf与Groovy入门经典(中文).pdf(2合一)

    Grails 的设计理念是"Convention over Configuration"(约定优于配置),这意味着它具有高度的可配置性和自动化特性,减少了开发者在项目初始化阶段的配置工作量。 1. **框架结构:** Grails 包含了模型(Model)、...

    Spring主流jar包大全

    groovy-all-2.4.5.jar guava-17.0.jar h2-1.3.176.jar hamcrest-core-1.3.jar hibernate-validator-5.2.4.Final.jar imgscalr-lib-4.2.jar jackson-annotations-2.2.3.jar jackson-core-2.2.3.jar jackson-databind-...

    groovy+maven+spring

    在实际操作中,我们需要在POM.xml文件中配置maven-resources-plugin,指定远程脚本的URL,并在Spring配置文件中定义Bean,指定脚本来源。这样,每次启动或更新脚本时,Spring都会自动加载并执行远程Groovy脚本,实现...

    springboot学习思维笔记.xmind

    spring-boot-starter-groovy-templates spring-boot-starter-hateoas spring-boot-starter-hornetq spring-boot-starter-integration spring-boot-starter-jdbc spring-boot-starter-...

    groovy-2.3.6-installer

    安装Groovy后,开发者可以使用Groovy Shell(groovysh)进行交互式编程,或者编写Groovy脚本执行任务。Groovy的语法简洁明了,支持闭包和动态类型,使得开发效率大大提高。此外,Groovy还可以用于构建脚本、Web开发...

    groovy+spring在web中的应用

    1. **配置文件简化**:Groovy的脚本特性使得我们可以用更简洁的方式编写Spring的XML配置,甚至完全摒弃XML,转向使用Groovy的@Configuration注解和@Bean方法。这种方式称为Groovy-based配置,它让配置更加直观且易于...

    groovy-all-2.4.12.jar

    最近的groovy-all-2.4.12.jar包供使用,解决as编译时报错问题

Global site tag (gtag.js) - Google Analytics