Web개발/Spring

[Spring] 자바 파일로 Bean등록하기

noobdev 2020. 1. 11. 15:53

원래 스프링에서 Bean을 설정하기 위해서는 xml파일에 Bean을 설정하는 방법을 사용했다.

하지만 스프링의 버전이 올라가면서 자바 파일을 이용한 Bean등록이 가능해졌다.

자바 파일로 Bean을 등록하기 위해서는 Annotaion을 사용한다.

 

Bean 등록 Annotation

Bean 관련 애노테이션들은 아래와 같다.

  • @Bean : bean 객체를 등록할 때 사용한다. name 속성을 사용하지 않는다면 메서드의 이름이 bena의 이름이 된다.
  • @Bean(name = 이름) : bean의 이름을 부여한다. 
  • @Bean(initMethod="메서드이름", destroyMethod="메서드이름") : xml파일에 init-method와 destroy-method와 같은 역할
  • @Lazy : xml 파일에 lazy - init과 같다. @Lazy를 설정하면 getBean( ) 메서드를 호출할 때 빈이 생성된다.
  • @Scope : bean의 Scope를 설정한다. (Scope : singleton, prototype)
  • @Primary : primary 속성을 지정한다.

 


자바 파일로 Bean 등록하기

 

자바 파일로 Bean을 등록하기 위해서는 우선 xml파일을 대체할 Bean 설정 파일(자바 파일)과 Bean  클래스가 필요하다.

Bean 설정 파일에 Bean을 등록하는 순서는 다음과 같다.

 

(1) xml파일을 대체할 자바 클래스를 만든다.

 

클래스를 만들었다면 클래스의 이름 위에 @Configuration Annotation을 작성해준다.

※ @Configuration 애노테이션은 현재 클래스가 Bean을 등록하기 위한 클래스임을 컨테이너에게 알려주는 역할을 한다.

 

(2) Bean 클래스를 만들어준다.

위 사진의 Bean은 Bean객체 생성 시 생성되었다는 로그만을 콘솔에 찍히게 하는 Bean이다.

 

(3) 빈 설정 파일(클래스)에 빈을 등록한다.

 

빈을 등록할 때는 @Bean 애노테이션을 이용한다.

@Bean 애노테이션에 name 속성을 주지 않으면 메서드의 이름이 빈의 이름이 된다.

메서드의 반환형은 등록할 빈의 타입으로 등록한다.

위의 사진에 빈은 Bean객체의 주소 값을 리턴한다.

 

@Bean에 name 속성 값을 주면 해당 값이 Bean의 이름이된다.

위 사진과 같이 @Bean 애노테이션에 name속성 값을 부여하면 해당 값이 Bean의 이름이 된다.

위 사진의 Bean을 사용할 때는 java2 라는 이름으로 접근하면 된다.

 

 

(4) 메인 클래스에서 빈 설정 파일을 읽어온다. 

 

main 메서드가 있는 클래스에서 Bean 설정 파일을 읽어 들여오고 getBean( ) 메서드로 해당 빈의 정보를 가져온다.

 

여기서 주의할 점은 xml의 설정 파일 등록 방식에서는 ClassPathXmlApplicationContext( ) 클래스를 사용하지만

자바로 Bean을 설정하기 위해서는 AnnotationConfigApplicationContext 클래스를 사용해서 설정한다.

 

생성자의 매개변수 인자 값으로는 자바 파일의 이름.class로 작성한다.

위 사진과 같이 자바 파일이름.class로 인자 값을 지정해준다.

 

getBean( ) 메서드로 Bean 객체의 정보를 가져올 때는 첫 번째 매개변수로 Bean의 이름을, 두 번째 매개변수로

빈 타입.class 로 작성한다.

 

만약 해당 빈 설정 파일에 해당 타입의 빈이 하나밖에 없는 경우 빈의 이름을 생략할 수 있다.

 

메인 클래스를 실행해보면 해당 Bean 객체의 주소 값이 로그에 찍히는 것을 확인할 수 있다.

자바 Bean 설정 파일에 등록한 Bean 객체의 주소가 로그에 찍히는 것을 확인할 수 있다.

 


본 포스팅은 필자가 공부한 내용을 정리해놓은 것으로 오류가 존재할 수 있습니다.
참고 : 인프런 - 스프링 프레임워크 개발자를 위한 실습을 통한 입문 과정