일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 참조형 반환타입
- 스프링 컨테이너
- 후위표기식
- Class Loader
- 스프링 싱글톤
- 포워드 프록시
- 네트워크
- 쇠막대기
- mvvm패턴
- 리버스 프록시
- 자바의 면접
- 전략 패턴
- SOLID원칙
- 옵저버 패턴
- try-catch
- 팩토리 패턴
- 싱글톤 패턴
- TCP/IP 4계층
- 기본형 매개변수
- 팩토리패턴
- 참조형 매개변수
- removeAll
- @Tranctional
- 스프링 빈
- 스프링
- k번째큰수
- 백준 2164
- www.naver.com치면 발생하는일
- 백준 1935
- 빈 타입 조회
- Today
- Total
스파이더 웹 개발
Spring의 전반적인 공부 ch02 본문
지금까지 수동으로 스프링 빈을 등록하는 방법과 의존 주입(자동의존주입)에 대해 알아보았다.
이번에는 자동 스프링 빈 등록과 컴포넌트 스캔에 공부해보자
컴포넌트 스캔의 기본원리는 @Component 어노테이션이 붙은 클래스를 스프링 빈으로 등록한다. 아마 가장 쉬운 빈 등록 방법이지 않을까 생각한다. 참고로 @Controller, @Service, @Repository 어노테이션들의 경우 모두 @Component 어노테이션을 포함하고 있다. @Component 어노테이션이 붙은 클래스는 스프링 컨테이너안에 클래스의 이름 중 맨 앞글자가 소문자로 바뀌어 빈의 이름으로 등록된다 사용방법은 아래와 같다
@Component
public class MemberDao {
..코드 구현
}
스프링 컨테이너에 해당형식으로 등록된다
memberDao / MemberDao.class
그러면 의문은 컴포넌트 스캔이 @Component 어노테이션이 붙은 클래스를 스프링 빈으로 등록한다면서 그러면 컴포넌트 스캔은 어떻게 하는건데??
방법은 설정클래스에 @ComponentScan 어노테이션을 붙여준다 그리고 속성으로 basePackages 가 있는데, 해당 속성은 스캔할 대상의 패키지 목록을 지정하는 것이다. 그러면 아래 그림처럼 Study 패키지와 하위 패키지에 속한 클래스를 스캔대상으로 지정하고 @Component가 붙은 클래스를 빈으로 등록한다
만약 자동으로 빈을 등록한 경우와 수동으로 등록 한 경우 충돌이 발생할 수 있는데, 어떻게 될까?
1. 자동 vs 자동
@Configuration
@ComponentScan(basePackages = {"Study","Study1"})
public class AppCtx {
..코드
}
Study 패키지와 Study1 패키지에 MemberDao 클래스가 존재하며 해당클래스 모두 @Component 어노테이션이 붙어있다고 가정하면, 예외가 발생하는데 쉽게 스프링 컨테이너는 똑같아서 모르겠어 라는 정도의 예외를 발생시킨다. 이러한 경우를 만들이유도 없지만 혹시나 만약에 진짜로 이러한 경우가 있다면 빈의 이름을 다르게 설정해주어 충돌을 피한다
2. 수동 vs 자동
@Component
public class MemberDao {
..코드 구현
}
@Configuration
@ComponentScan(basePackages = {"Study"})
public class AppCtx {
@Bean
public MemberDao memberDao() {
return new MemberDao();
}
}
수동과 자동의경우에는 어떻게될까? 의외로 쉽다. 수동 말그대로 노력했으니 노력상으로 수동 너 당첨이다!
수동으로 등록한 빈이 우선하게 된다
AOP 프로그래밍(초보자에게 어려우니 가볍게 보자 나는 초보자다)
여러 객체에 공통으로 적용할 수 있는 기능을 분리해서 재사용성을 높여주는 프로그래밍 기법 AOP는 핵심 기능과 공통 기능의 구현을 분리함으로써 핵심 기능을 구현한 코드의 수정 없이 공통 기능을 적용할 수 있게 만들어 준다
AOP의 기본 개념은 핵심 기능에 공통 기능을 삽입하는 것이다. 즉 핵심 기능의 코드를 수정하지 않으면서 공통 기능의 구현을 추가하는 것이 AOP이다
'Spring' 카테고리의 다른 글
Spring의 전반적인 공부 ch03 (0) | 2022.09.03 |
---|---|
Spring의 전반적인 공부 ch01 (0) | 2022.08.24 |
HTTP 헤더 (0) | 2022.08.12 |
HTTP 상태 코드 (0) | 2022.08.12 |
HTTP 메서드 (0) | 2022.08.11 |