[TIL] 7월 3일]

김동규·2023년 7월 3일
0

Bean을 수동으로 등록하는 방법

@Bean 어노테이션을 통해 수동으로 Bean을 등록할 수 있다.

@Component 어노테이션

@Component 어노테이션을 이용하면 Bean Configuration 파일에 Bean을 따로 등록하지 않아도 사용할 수 있다.

빈 등록자체를 빈 클래스 자체에다가 할 수 있다는 의미이다.

@Component 어노테이션은 기본적으로 타입기반의 자동주입 어노테이션이다.
@Autowired, @Resource와 비슷한 기능을 수행한다.

@Component 자동주입

@Component어노테이션을 사용하여 자동주입하는것은 @Bean 어노테이션을 이용하는 것과 동일하다.

@Autowired
타입을 통한 자동주입, 변수에 설정해주면 자동으로 타입에 맞는 빈을 찾아서 setter를 통한 주입을 해준다.

같은 타입의 Bean이 2개일 경우

1. Bean의 이름으로 찾는 방법

같은 타입의 Bean이 2개일 경우 Autowired는 기본적으로 Bean타입으로 지원하는데 2개 이상일 경우 Bean의 이름으로 찾는다.

상기의 2개처럼 같은 타입의 Bean이 2개일 경우 Food 타입으로 찾을 수 없어서 오류가 난다.


하지만 Bean의 이름으로 할 경우 오류가 사라졌다.

2. @Primary 어노테이션을 Bean 객체에 주입


@Primary를 사용하면 같은 타입의 빈이 여러개 있더라도 우선적으로 @Primary가 적용되어 있는 Bean 객체를 주입해준다.

3. @Qualifier 어노테이션을 Bean 객체에 주입


@Qualifier() 를 사용하기 위해서는 주입받고자 하는 위치에 반드시 연결을 해줘야한다. 또한 ()파라미터에 들어가는 값이 일치해야한다.

@Primary 와 @Qualifier 중 높은 우선 순위는?

@primary 를 Bean 객체에 설정

@Qualifier 를 Bean 객체에 설정


Pizza가 출력이 되면서 같은 타입의 Bean 중 @Qualifier가 더 우선순위가 높음을 알 수 있다.

@Primary와 @Qualifier 를 올바르게 사용하는 방법

같은 타입의 Bean이 여러개가 있을 때

범용적으로 사용되는 Bean 객체에는 @Primary
지엽적으로 사용되는 Bean 객체에는 @Qualifier를 사용한다.

Ex. 치킨의 비중이 95% 일때 Chicken에는 @Primary를 설정하는 것이 좋고, 피자의 비중이 5%일 경우는 지엽적이므로 @Qualifier를 설정하는 것이 좋다.

Spring에서 우선순위를 설정할 때 큰 범위(@Primary)는 우선 순위가 더 낮다좁은 범위(@qualifier)의 우선 순위가 더 높다.

profile
안녕하세요~

0개의 댓글