Spring Boot Java Beanの定義

JavaコードでBeanを定義する

@BeanアノテーションでBeanを作成する

Hoge.java

package sample.springboot;

public class Hoge {

    private String name;

    public Hoge(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Hoge [name=" + name + "]";
    }
}

Main.java

package sample.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class Main {

    public static void main(String[] args) {
        try (ConfigurableApplicationContext ctx = SpringApplication.run(Main.class, args)) {
            Hoge h = ctx.getBean(Hoge.class);
            System.out.println(h);
        }
    }

    @Bean
    public Hoge getHoge() {
        System.out.println("Main#getHoge()");
        return new Hoge("hoge");
    }
}

実行結果

Main#getHoge()
Hoge [name=hoge]

説明

  • メソッドに@Beanを付与すると、そのメソッドでBeanインスタンスを作成できます。
  • この形式のBeanは、@Configurationを付与したクラスで定義できます。
    • @SpringBootApplication@Configurationを付与した場合と同じ効果があります。

@Configurationを付与したクラスを別に作成する

クラスに@Configuration、メソッドに@Beanを付与すると、任意のクラスのBeanを作成するメソッドを定義できます。

HogeProvider.java

package sample.springboot;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class HogeProvider {

    @Bean
    public Hoge getHoge() {
        System.out.println("HogeProvider#getHoge()");
        return new Hoge("hoge provider");
    }
}

Main.java

package sample.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@SpringBootApplication
public class Main {

    public static void main(String[] args) {
        try (ConfigurableApplicationContext ctx = SpringApplication.run(Main.class, args)) {
            Hoge h = ctx.getBean(Hoge.class);
            System.out.println(h);
        }
    }
}

実行結果

HogeProvider#getHoge()
Hoge [name=hoge provider]