SPRING

DI / 의존 관계 설정 방법 2 (Annotation 이용 방법)

nang. 2019. 3. 18. 21:53
반응형
SMALL

< 객체 생성 및 의존 관계 설정 방법 = 객체 설정 정보 >


② Annotation 이용


* 일일이 의존 관계를 설정할 필요 없이 자동으로 프로퍼티나 생성자 파라미터 값으로 동일 타입의 빈 객체를 전달해 준다.

* 일일이 <ref> 태그를 사용하지 않아도 된다.

* 시간이 줄어든다.

* 설정 코드가 줄어든다.


* <context:annotation-config />



1. @Autowired

- 생성자, 필드, 메소드 세 곳에 적용 가능

- xml에서 프로퍼티 설정 코드가 없어도 class= 부분의 타입을 보고 동일 타입을 갖는 빈을 프로퍼티 값으로 사용함

- 만약 @Autowired 를 썼는데 그 객체가 빈 등록이 안되어있으면 익셉션이 난다.

  이걸 그냥 null 값으로 두고 싶으면 @Autowired(required = false) 이렇게 해준다.



2. @Qualifier

- 보통 @Autowired 는 빈 하나를 대상으로 적용되는데 동일한 타입의 빈이 여러개이면 자동 주입이 어렵긴하다.

   그런 경우 변수 이름을 id로 보고 동일한 객체를 찾아 주입한다.

- 혹은 @Qualifier("nang") 을 @Autowired 랑 같이 써줘서 id 처럼 사용한다.

- @Autowired

  @Qualifier("nang")



3. component-scan ---> @Component

- 특정 패키지 또는 그 하위 패키지에서 클래스를 찾아 스프링 빈으로 등록해주는 기능

- @Component 가 붙은 클래스들을 검색

- <context:component-scan> 태그를 이용해서 스프링이 클래스를 검색할 패키지 지정

- 위 태그로 패키지를 지정하면 그 패키지 내의 @Component 가 붙은 클래스 파일들을 스캔해서 빈으로 등록하는 것!

- 속성 : base-package= 필수!

- <context:component-scan base-package="패키지명" />

- 클래스가 알아서 빈만 등록하는거기 때문에 의존 관계 설정은 @Autowired 같은 Annotation을 사용해야 함

- 스프링이 빈 등록할 때 보통 클래스의 첫 글자를 소문자로 바꿔서 빈 이름으로 등록함

ex) public class Product {} 이면 <bean id="product" /> 이런 식

- 그래서 자바에서 getBean 할 때 Product pd = context.getBean("product", Product.class); 이렇게 소문자로 바꾼 이름으로 걍 써서 빈 객체 가져오면 됨

- 만약에 자동으로 등록되는 빈 이름 말고 특정 이름을 사용하고 싶으면 @Component("nang") 이렇게 해주면 됨

---> 빈 객체 자동 생성 (id="nang")











③ 자바 클래스를 이용한 객체 설정


- ApplicationContext.java

- @Bean 어노테이션 사용하면 빈 등록

- 생성자를 이용한 의존 객체 주입

- AnnotationConfigApplicationContext


public class MainForSpringJavaConf {
    public static void main(String[] args) {
        AbstractApplicationContext context = new AnnotationConfigApplicationContext("ApplicationContext.java");
        ...
    }
}


반응형
LIST

'SPRING' 카테고리의 다른 글

Spring Container  (0) 2019.03.18
AOP (Aspect-Oriented Programming)  (0) 2019.03.18
DI / 의존 관계 설정 방법 1 (XML 이용 방법)  (0) 2019.03.18
DI (Dependency Injection) / 의존 객체 생성 방법  (0) 2019.03.18
Spring Web MVC framework  (0) 2019.03.16