웹개발일지

Spring 빈을 등록하는 방법 본문

Spring

Spring 빈을 등록하는 방법

hee_log 2023. 11. 8. 23:31
728x90

스프링에서 빈을 등록하는 방법에는 Service와 Repository 외에도 두 가지가 더 있는데 그 방법에 대해 알아보자. 

 

 

Configuration과 Bean 어노테이션을 붙이는 방법이 있는데 이 둘은 세트여서 함께 사용해주어야 한다. 

 

@Configuration 

먼저 Configuration으로 등록하는 방법이다. 

- 클래스에 붙이는 어노테이션 

- @Bean을 사용할 때 함께 사용해주어야 한다

 

@Bean 

- 메소드에 붙이는 어노테이션 

- 메소드에서 반환되는 객체를 스프링 빈에 등록한다. 

 

 

이해를 위해 UserRepository에 @Bean을 사용해보자. 

 

원래는 이렇게 @Repository 어노테이션을 통해 UserRepository를 빈에 등록했었다. 

일단 그걸 지워주고, 그러고 나면 UserRepository를 사용하는 UserService에서 오류가 난다. ; 스프링 빈이 아닌데 주입받으려 시도했기 때문에. 

public UserService(UserRepository userRepository) {
	this.userRepository = userRepository;
}

 

 

이제, Configuration을 만들어보자. 보통 Config라는 패키지 안에 넣는다. 패키지를 만들고, UserConfiguration이라는 클래스를 만들어준다. 

 

클래스에 해줄 작업 

1. JdbcTemplate를 주입받는 UserRepository를 반환하는 메소드를 하나 만든다. 

2. 메소드 위에 Bean 어노테이션을 붙여준다. 

 

@Bean 
public UserRepository userRepository(JdbcTemplate jdbcTemplate) {
    return new UserRepository(jdbcTemplate);
}

 

1) 들어온다는 의미: Bean을 붙여주면 스프링이 관리하는 jdbcTemplate이 들어올 수 있게 된다. 

2) 빠져나간다는 의미: 유저서비스에 유저 리파지토리에 스프링 컨테이너가 빈 어노테이션을 통해 등록된 유저 리파지토리를 주입해준단 의미 

 

이렇게 유저 리파지토리의 어노테이션, 빈 어노테이션을 사용해서 스프링 빈으로 등록을 해본 작업이다. 

 

추가로, Configuration, Bean 조합을 써야할 때도 있다. 먼저 리파지토리 어노테이션을 사용할 경우, 개발자가 직접 만든 클래스를 빈으로 등록할 때 많이 쓴다. 예를 들어 유저 리파지토리 같은 경우에는, 직접 만든 클래스다. 그래서 사실 리파지토리로 만드는게 관리고. 사실 빈으로 만들면 안됐던 것.. 비슷하게 유저 서비스의 경우에도 직접 만들어준 클래스이기 때문에 이렇게 서비스 어노테이션을 상요했다. 

 

Conflication, Bean 조합을 언제쓰냐 

 외부 라이브러리나 프레임워크에서 만든 클래스를 등록할 때 사용한다. 예를 들어 JdbcTemplate 같은 경우 외부의 클래스다. 이럴 때 두 조합을 사용한다. 

 

개발하면서 직접 만든 클래스는 @Service나 @Repository를 사용하는 것이 좋다.