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 개발자를 위한 실습을 통한 입문 과정 |
'Web(웹)_관련 공부 모음 > [강의] SpringFramework' 카테고리의 다른 글
JDBC & MyBatis - [DB 연동] (0) | 2022.02.18 |
---|---|
@어노테이션 - [Annotation 활용하기] (0) | 2022.02.14 |
스프링 DI - [Dependency Injection] (0) | 2022.02.12 |
스프링 IoC [Inversion of Control] (0) | 2022.02.11 |
Maven 기반-[기본 스프링 프로젝트 생성] (0) | 2022.02.11 |