[Spring Framework] Component Scan
1. Component Scan이란?
아래와 같은 설정 클래스가 있습니다.
@Configuration
public class FirstConfiguration {
@Bean
public MemberRegisterService memberRegSvc() { return new MemberRegisterService(); }
@Bean
@Qualifier("printer")
public MemberPrinter memberPrinter() { return new MemberPrinter(); }
@Bean
public VersionPrinter versionPrinter() {
VersionPrinter versionPrinter = new VersionPrinter();
versionPrinter.setMajorVersion(5);
versionPrinter.setMinorVersion(0);
return versionPrinter;
}
}
위와 같은 방식으로 설정 클래스를 작성한다면 등록해야할 빈이 늘어날 때마다 설정 클래스의 코드가 길어질 것입니다. 이 때 Component Scan 기능을 이용하면 설정 클래스를 엄청 깔끔하게 만들 수 있습니다. 위의 빈에서 MemberRegisterService를 @ComponentScan을 이용해 빈으로 등록해보겠습니다. 먼저 해당 클래스에 @Component 애노테이션을 붙여줍니다.
@Component // 해당 클래스를 빈으로 등록한다. 맨 앞글자를 소문자로 바꾼 클래스명이 빈의 이름이 된다.
public class MemberRegisterService {
@Autowired
private MemberDao memberDao;
public MemberRegisterService() { }
public MemberRegisterService(MemberDao memberDao) { this.memberDao = memberDao; }
public Long regist(RegisterRequest req) { // ...생략 }
}
빈의 이름을 따로 주고싶다면 @Component("memberRegSvc") 처럼 값으로 줄 수 있습니다. 다음으로 클래스를 Component로 등록했다면 설정 클래스에서 @ComponentScan Annotation을 이용해 Component를 불러와 빈으로 등록할 수 있습니다.
@ComponentScan 애노테이션의 값으로 주어진 basePackages를 이용해 스캔할 대상 패키지를 지정합니다.
@Configuration
@ComponentScan(basePackages = {"spring"}) // 괄호의 값은 스캔할 패키지명이다.
public class AppCtx {
@Bean
@Qualifier("printer") // Spring Container으로부터 주입할 빈의 이름을 명시합니다.
public MemberPrinter memberPrinter() { return new MemberPrinter(); }
@Bean
public VersionPrinter versionPrinter() {
VersionPrinter versionPrinter = new VersionPrinter();
versionPrinter.setMajorVersion(5);
versionPrinter.setMinorVersion(0);
return versionPrinter;
}
}
'Web > Spring Web MVC' 카테고리의 다른 글
[Spring Framework] Spring Web MVC (0) | 2019.09.14 |
---|---|
[Spring JDBC] JdbcTemplate 클래스 (0) | 2019.09.08 |
[Spring MVC] Spring MVC의 AOP - Proxy 객체와 AOP (0) | 2019.09.07 |
[Spring MVC] @Autowired 애노테이션의 필수 여부 (0) | 2019.09.07 |
[Spring Web MVC] Configuration 관리하기 (@Import) (0) | 2019.09.04 |
댓글
이 글 공유하기
다른 글
-
[Spring JDBC] JdbcTemplate 클래스
[Spring JDBC] JdbcTemplate 클래스
2019.09.08 -
[Spring MVC] Spring MVC의 AOP - Proxy 객체와 AOP
[Spring MVC] Spring MVC의 AOP - Proxy 객체와 AOP
2019.09.07 -
[Spring MVC] @Autowired 애노테이션의 필수 여부
[Spring MVC] @Autowired 애노테이션의 필수 여부
2019.09.07 -
[Spring Web MVC] Configuration 관리하기 (@Import)
[Spring Web MVC] Configuration 관리하기 (@Import)
2019.09.04