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]
최종 수정 : 2017-12-17