공부하는 스누피
[Spring] 자동 의존 주입을 위한 어노테이션들 본문
@Autowired 어노테이션
- 의존 자동 주입 기능을 사용하기 위해 대상 객체에 붙이는 어노테이션이다.
- Bean 객체의 메소드에 붙이면 해당 메소드를 호출하고, 메소드 파라미터 타입에 해당하는 Bean을 찾아 인자로 주입한다.
- 필드에도 적용할 수 있다.
- 설정 클래스에서 직접 주입을 하지 않아도 되어 편리하다.
- @Qualifier로 주입 Bean의 중복을 막을 수 있다. 없으면 Bean의 이름을 한정자(Qualifier)로 지정한다.
- @Primary로도 중복을 막을 수 있다. @Primary가 붙여진 Bean을 우선시 한다.
- required 속성을 false로 지정하면 Bean이 존재하지 않아도 메소드를 호출하지 않기 때문에 Exception 발생 안함.
=> 자동 주입 대상 타입을 Optional로 하면 Bean이 없을 경우 null값인 Optional을 할당한다. (메소드가 호출됨)
=> @Nullable을 사용하면 Bean이 없을 경우 null을 할당한다. (메소드가 호출됨)
- 직접 주입했더라도 자동 주입을 넣으면 자동 주입된다.
@Qualifier 어노테이션
- 자동 주입할 빈을 지정하는 어노테이션이다.
- 지정할 Bean 설정 메소드 위에 붙이거나, 주입하는 세터 메소드 위에 붙이면 된다.
- 상위 클래스 Bean과 하위 클래스 Bean이 함께 존재할 때, 자동 주입 과정에서 구분할 수 없으므로 상위 클래스에 @Qualifier를 붙여주어 구분한다.
@Component 어노테이션
- 스프링이 직접 클래스를 검색해서 빈으로 등록해주는 컴포넌트 스캔 기능의 대상 클래스를 표시한다.
- @Component에 값을 주면 Bean 이름이 해당 값으로 결정된다.
- 컴포넌트 스캔으로 Bean을 등록하려면 설정 클래스에 @ComponentScan을 붙여야 한다.
@ComponentScan 어노테이션
- 컴포넌트 스캔 기능을 사용할 수 있게 설정 클래스에 붙이는 어노테이션이다.
- basePackages 속성값으로 스캔 대상 패키지를 지정할 수 있다.
- basePackageClasses 속성값으로 스캔 대상 타입을 지정할 수 있다.
- excludeFilters 속성값으로 자동 주입에서 제외할 대상을 지정할 수 있다. (배열 사용 가능)
=> 정규 표현식 사용 (type = FilterType.REGEX, pattern="~")
=> AspectJ 패턴 (type = FilterType.ASPECTJ, pattern="~") (aspectjweaver 모듈 추가해야함)
=> 어노테이션 필터링 (type = FilterType.ANNOTATION, classes={~}) (class에 어노테이션 인터페이스 들어감)
=> 특정 타입(클래스) (type = FilterType.ASSIGNABLE_TYPE, classes = ~)
- 컴포넌트 스캔에 포함되는 어노테이션들
=> @Component, @Controller(MVC용), @Service, @Repository(DB용), @Aspect, @Configuration
- 수동 등록한 Bean이 있을 경우 수동 등록한 Bean을 우선한다.
'Web > Spring' 카테고리의 다른 글
[Spring] 메시지 정리 (0) | 2020.08.28 |
---|---|
[Spring] MVC 기본 정리 (0) | 2020.08.19 |
[AWS, Spring] Spring 프로젝트 Beanstalk에 올리기 (0) | 2020.08.11 |
[Spring] AOP 정리 (0) | 2020.08.10 |
[Spring] Dependency Injection (DI) (0) | 2020.08.05 |