«1. Обзор

В этой быстрой статье мы сосредоточимся на том, как мы можем использовать конфигурацию на основе Groovy в наших проектах Java Spring.

2. Зависимости

Прежде чем мы начнем, нам нужно добавить зависимость в наш файл pom.xml. Нам также нужно добавить плагин для компиляции наших файлов Groovy.

Давайте сначала добавим зависимость для Groovy в наш файл pom.xml:

<dependency>
    <groupId>org.codehaus.groovy</groupId>
    <artifactId>groovy</artifactId>
    <version>2.5.10</version>
</dependency>

Теперь добавим плагин:

<build>
    <plugins>
        //...
        <plugin>
            <groupId>org.codehaus.gmavenplus</groupId>
            <artifactId>gmavenplus-plugin</artifactId>
            <version>1.9.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>addSources</goal>
                        <goal>addTestSources</goal>
                        <goal>generateStubs</goal>
                        <goal>compile</goal>
                        <goal>generateTestStubs</goal>
                        <goal>compileTests</goal>
                        <goal>removeStubs</goal>
                        <goal>removeTestStubs</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Здесь мы используем gmavenplus-plugin со всеми целями.

Последние версии этих библиотек можно найти на Maven Central.

3. Определение Bean-компонентов

Начиная с версии 4, Spring обеспечивает поддержку конфигураций на основе Groovy. Это означает, что классы Groovy могут быть законными компонентами Spring.

Чтобы проиллюстрировать это, мы собираемся определить bean-компонент, используя стандартную конфигурацию Java, а затем настроим тот же bean-компонент, используя Groovy. Таким образом, мы сможем увидеть разницу.

Давайте создадим простой класс с несколькими свойствами:

public class JavaPersonBean {
    private String firstName;
    private String lastName;

    // standard getters and setters
}

Важно помнить о геттерах/сеттерах — они необходимы для работы механизма.

3.1. Конфигурация Java

Мы можем настроить тот же компонент, используя конфигурацию на основе Java:

@Configuration
public class JavaBeanConfig {

    @Bean
    public JavaPersonBean javaPerson() {
        JavaPersonBean jPerson = new JavaPersonBean();
        jPerson.setFirstName("John");
        jPerson.setLastName("Doe");
        
        return jPerson;
    }
}

3.2. Конфигурация Groovy

Теперь мы можем увидеть разницу, когда мы используем Groovy для настройки ранее созданного bean-компонента:

beans {
    javaPersonBean(JavaPersonBean) {
        firstName = 'John'
        lastName = 'Doe'
    }
}

Обратите внимание, что перед определением конфигурации bean-компонентов мы должны импортировать класс JavaPersonBean. Кроме того, внутри блока bean-компонентов мы можем определить столько bean-компонентов, сколько нам нужно.

Мы определили наши поля как приватные, и хотя Groovy делает вид, что обращается к ним напрямую, он делает это с помощью предоставленных геттеров/сеттеров.

4. Дополнительные настройки бинов

Как и в конфигурации на основе XML и Java, мы можем настраивать не только бины.

Если нам нужно установить псевдоним для нашего компонента, мы можем сделать это легко:

registerAlias("bandsBean","bands")

Если мы хотим определить область действия компонента:

{ 
    bean ->
        bean.scope = "prototype"
}

Чтобы добавить обратные вызовы жизненного цикла для нашего компонента, мы можно сделать:

{ 
    bean ->
        bean.initMethod = "someInitMethod"
        bean.destroyMethod = "someDestroyMethod"
}

Мы также можем указать наследование в определении bean-компонента:

{ 
    bean->
        bean.parent="someBean"
}

Наконец, если нам нужно импортировать некоторые ранее определенные bean-компоненты из конфигурации XML, мы можем сделать это с помощью importBeans() :

importBeans("somexmlconfig.xml")

5. Заключение

В этом уроке мы увидели, как создавать конфигурации bean-компонентов Spring Groovy. Мы также рассмотрели настройку дополнительных свойств наших компонентов, таких как их псевдонимы, области действия, родительские элементы, методы инициализации или уничтожения, а также способы импорта других компонентов, определенных XML.

Хотя примеры просты, их можно расширить и использовать для создания любого типа конфигурации Spring.

Полный пример кода, который используется в этой статье, можно найти в нашем проекте GitHub. Это проект Maven, поэтому вы должны иметь возможность импортировать его и запускать как есть.