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]