Как вынести Spring конфигурации в Java классы?

В этом уроке пойдет речь о Spring конфигурациях, а именно о том как их хранить в виде классов.

Spring 3 дает нам возможность создавать конфигурации в виде Java классов, но он также не отменяет использование классических XML конфигураций.

Шаг 0

Создадим простой конфигурационный файл xml, подробней можно посмотреть тут:

<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-3.0.xsd">

	<bean id="helloBean" class="com.devcolibri.hello.impl.HelloWorldImpl">

</beans>

И создадим равносильный этому конфигурационному xml файлу, JavaConfig:

package com.devcolibri.config;

import com.devcolibri.hello.impl.HelloWorldImpl;
import com.devcolibri.hello.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeenConfig {

    @Bean(name="helloBean")
    public HelloWorld helloWorld() {
        return new HelloWorldImpl();
    }

}

Что в первом, что во втором случае мы получим одинаковые конфигурации.

Шаг 1

Создайте новый Java Project и в нем создайте следующую структуру пакетов и файлов:

Как вы видите по картинке выше у нас нет конфигурационных xml файлов.

Шаг 2

Теперь добавим зависимости Spring в pom.xml:

<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://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.devcolibri</groupId>
    <artifactId>SpringJavaConfig</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>SpringJavaConfig</name>

    <properties>
        <spring.version>3.2.0.RELEASE</spring.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

    </dependencies>

</project>

Мы добавили две самые основные зависимости которые требуется для нашего примера.

Шаг 3

Теперь создадим Been в src/main/java/com/devcolibri/hello/HelloWorld.java:

package com.devcolibri.hello;

public interface HelloWorld {

    void sayHelloWorld(String st);

}

Обратите внимание, что это интерфейс!

Шаг 4

Создаем реализацию данного been-а, который мы создали выше в пакете  src/main/java/com/devcolibri/hello/impl/HelloWorldImpl.java:

package com.devcolibri.hello.impl;

import com.devcolibri.hello.HelloWorld;

public class HelloWorldImpl implements HelloWorld {
    @Override
    public void sayHelloWorld(String st) {
        System.out.println(st);
    }
}

Наследуемся от been-а HelloWorld.java — это наш интерфейс.

Шаг 5

Теперь создаем конфигурационный Java файл в src/main/java/com/devcolibri/config/BeenConfig.java:

package com.devcolibri.config;

import com.devcolibri.hello.impl.HelloWorldImpl;
import com.devcolibri.hello.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeenConfig {

    @Bean(name="helloBean")
    public HelloWorld helloWorld() {
        return new HelloWorldImpl();
    }

}

В строке 8 — вы увидите аннотацию @Configuration — она говорит Spring-у о том, что этот класс будет хранить конфигурации.

В строке 11 — аннотация @Bean(name=’helloBean’) — она указывает на реализацию Bean-а который в качестве параметра метода, а атрибут данной аннотации name=’helloBean’ говорит о том, что получить bean можно по этому имени.

Шаг 6

Создаем EnterPint (точка входа в программу) тут src/main/java/com/devcolibri/core/Main.java:

package com.devcolibri.core;

import com.devcolibri.config.BeenConfig;
import com.devcolibri.hello.HelloWorld;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

    public static void main(String[] args) {

        ApplicationContext context = new AnnotationConfigApplicationContext(BeenConfig.class);
        HelloWorld obj = (HelloWorld) context.getBean("helloBean");

        obj.sayHelloWorld("Hello World and DevColibri.com!");

    }

}

В строке 12 мы указываем какие конфигурации потребуются, определяем это по их содержимому.

В строке 13 мы получаем bean по его имени, что мы указали в качестве параметра в аннотации @Bean(name=’helloBean’)

Структура проекта

Шаг 7

Запускаем нашу программу.

В результате выполнения нашей программы мы получим следующий текст в консоли:

Hello World and DevColibri.com!

p.s. Понравился урок? Если хочешь получать подобные уроки на email то укажи его ниже в форме.

Урок создан: 01 июня 2013 | Просмотров: 10596 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

  • 03 июня 2013 в 20:43

    Ruslan

    >>В строке 11 — аннотация @Bean(name=’helloWorld’) —

    В листингах у вас другой идентификатор у бина — helloBean.

  • 10 июля 2013 в 06:58

    Василий

    Фраза «Создадим простой конфигурационный файл xml:» звучит однозначно, но файл не создан и нигде не используется (тут наверное нужно сослаться на предыдущие уроки). Предлагаю заменить слово «Создадим», на «Посмотрите на», а далее уже говорить про равносильность конфигурирования.

  • 31 августа 2016 в 12:42

    Владимир

    Где пример инжекции зависимости в бин? Статья без этого просто бесполезна.

  • 26 декабря 2016 в 09:13

    Yuriy

    Подписка