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