스파이더 웹 개발

Spring의 전반적인 공부 ch02 본문

Spring

Spring의 전반적인 공부 ch02

스파이더웹 2022. 8. 25. 00:20
728x90
반응형

지금까지 수동으로 스프링 빈을 등록하는 방법과 의존 주입(자동의존주입)에 대해 알아보았다.

 

이번에는 자동 스프링 빈 등록과 컴포넌트 스캔에 공부해보자

 

컴포넌트 스캔의 기본원리는 @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이다

728x90
반응형

'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
Comments