@Component - [ @Component 설정]

728x90

20강. [Component] 

[@Bean으로 빈 등록 VS @Component 빈 등록]

-@Bean : 개발자가 Class의 코드를 수정할 수 없는 경우 사용

            : 같은 클래스 타입의 Bean을 여러 개 등록할 경우 사용

-@Component : 개발자가 Class의 코드를 수정할 수 있는 경우 사용


컴포넌트 스캔

                                                 cf. 의존 자동 주입: 이미 빈 객체이지만 설정 코드에 따로 주입되지 않았을 때 사용

[컴포넌트 스캔]

- 스프링이 (아직 빈 객체X) 직접 클래스 검색해서 빈으로 등록해주는 기능
- 설정 클래스에 빈으로 등록하지 않아도 원하는 클래스를 빈으로 등록
- 스프링이 따로 검색해서 빈 등록해주므로 설정 코드가 줄어든다.

   ▶[스캔 대상 지정 ] | @Component

-클래스에 @Component 붙이면, 해당 클래스는 스캔 대상이 됨

-@Component에 값을 주면 빈 자동 등록될 이름 지정됨

          @Component : 값을 주지 않으면
              public class Apple { }                          -> 클래스 이름 첫 글자 소문자로 바꾼 이름 = 빈 이름

          @Component(“속성값”) : 값을 주면
              public class Apple { }                           -> 속성값 = 빈 이름

   ▶[스캔 설정] | @ComponentScan

-스캔 대상 클래스를 스캔해서 스프링 빈으로 등록하기 위해서는

설정 클래스에서 @ComponentScan 적용해야 한다.

-basePackages 속성값은 스캔 대상 패키지 목록을 지정함.

                      // 코드는 spring 패키지와 그 하위 패키지에 속한 클래스들을 스캔 대상으로 설정

@Configuration
@ComponentScan(basePackages = {"spring"} )
public class 설정클래스 {
...
}

21강. [Component Bean 기본 설정]

[@Component]

-‘타입을 통해 Bean 객체를 가져올 수 있다.

-같은 클래스 타입의 빈을 한 개 만들 경우에는 그냥 해당 타입의 빈으로 가져오면 됨

-IoC 컨테이너 생성 시 자동으로 객체 생성함 (빈 설정 파일 로딩 시)

-Singleton

[@Component(“이름”) ]

-설정한 이름으로 Bean 객체 가져올 수 있다.

-같은 클래스 타입의 빈을 여러 개 만들 경우에는 구분을 위해 이름을 사용함

-IoC 컨테이너 생성 시 자동으로 객체 생성함 (빈 설정 파일 로딩 시)

-Singleton


        ▶[@Lazy]

-이 어노테이션 붙이면 getBean() 호출할 때 객체가 생성된다.

-기본적으로 싱글톤(Singleton)

@Component
@Lazy
public class TestBean3 (){
}

        [@Scope (“prototype”) ]

-이 어노테이션 속성값에 “prototype”을 주게 되면 프로토타입으로 객체가 생성됨

-, 매번 새로운 주소값을 갖는 빈 객체가 생성되는 것(cf. 싱글톤=매번 동일 객체 생성)

        [@PostConstruct, @ProDestroy]

-생성자 호출 전 자동 호출 메소드 등록 :@PostConstuct

-객체 소멸 시 자동 호출될 메소드 등록 :@PreDestroy

 

22강.[Component 자동 주입]

[Component 자동 주입]

-@Bean을 통해 설정했던 주입 방식과 동일한 방식 사용

                   -@Autowired : 타입을 통한 자동 주입

                   -@Qualifier : 이름을 통한 자동 주입

                   -생성자의 경우: 타입이 같은 Bean을 찾아 자동 주입

@Component
public class TestBean1 {
	//(1) 
	@Autowired 
	private DataBean1 data1;
	
	//(2) 
	@Autowired
	@Qualifier("obj2")
	private DataBean2 data2;
	
	//(3) 
	@Resource(name = "obj3")
	private DataBean3 data3;
	
               ...
}

 

[참고] - SpringFramework 개발자를 위한 실습을 통한 입문 과정

728x90