본문 바로가기
Spring

[Spring/스프링] ComponentScan, XML & Java 사용법

by LasBe 2022. 4. 5.
반응형

⚡️ComponentScan


스프링에서 빈을 등록할 때 XML 혹은 JavaConfig에 Bean을 직접 등록시켜주곤 했습니다.

 

관리해야할 빈이 많아진다면 직접 빈을 등록해주는 작업 또한 많아져 번거롭겠죠?

 

ComponentScan은 직접 클래스 파일을 스캔하는 과정을 통해 의존성을 주입하고 빈을 등록합니다.


📌 컴포넌트 스캔 대상

클래스에 다음과 같은 어노테이션이 선언되어 있을 때 스캔 과정에서 빈으로 등록합니다.

  • @Component : 기본적으로 스프링에서 관리되는 객체임을 표시하기 위해 사용
  • @Controller : MVC 패턴 중 컨트롤러에 사용, 별도로 @RequestMapping 사용 가능
  • @Repository : 데이터 입출력 (DAO)에 사용, 예외 작업 제공
  • @Service : 비즈니스 로직에 사용, 추가적인 exception handling 가능

 

🔎 빈 이름 변경

빈 이름 Default는 클래스 이름의 첫번째 알파벳을 소문자로 바꾸면 됩니다.

만약 이름을 바꿔야한다면 @Component("빈 이름")과 같이 어노테이션에 직접 부여할 수 있습니다.


📌 컴포넌트 스캔 제외

  • @IgnoreDuringScan : 스캔하지 않을 클래스에 선언하면 대상에 포함하지 않음

📌 XML에서 사용

<context:component-scan base-package="패키지명"/>

base-package에 스캔할 패키지를 넣어준 뒤, 패키지에 포함된 클래스를 스캔합니다.

 

GenericXmlApplicationContext factory = 
	new GenericXmlApplicationContext("classpath:패키지명/XML파일명.xml");
    
BeanClass scanBean = factory.getBean("beanClass", BeanClass.class);

설정파일이 XML이기 때문에 GenericXmlApplicationContext를 통해 컨테이너를 생성합니다.

 

컨테이너를 생성할 땐 컴포넌트 스캔을 사용한 xml 파일을 위와 같이 불러온 뒤

getBean() 메소드를 사용해 등록한 빈을 불러올 수 있습니다.


📌 JavaConfig에서 사용

@Configuration
@ComponentScan(basePackages = "패키지명")
public class JavaConfig {

}

XML 설정 파일 대신 자바 클래스를 사용할 땐

@Configuration 어노테이션을 통해 설정파일임을 명시하고,

@ComponentScan과 basePackages에 스캔할 패키지의 이름을 넣어줍니다.

 

AnnotationConfigApplicationContext factory =
    	new AnnotationConfigApplicationContext(클래스명.class);

BeanClass scanBean = factory.getBean("beanClass", BeanClass.class);

설정파일이 자바 클래스기 때문에 AnnotationConfigApplicationContext를 통해 컨테이너를 생성합니다.

 

설정 클래스를 (클래스명.class)에 넣어주어 컨테이너에 전달한 뒤

getBean() 메소드로 등록한 빈을 불러올 수 있습니다.


📌 의존성 주입 (DI)

 

[Spring/스프링] 제어의 역행(IoP)과 의존성 주입(Dependency Injection, DI)

⚡️ 제어의 역행 (IoP) 제어의 역행은 간단히 객체 생성과 의존 관계를 직접 처리하는게 아니라 소스에 의존관계가 명시되지 않도록 컨테이너가 대신 처리한다고 설명할 수 있습니다. 이는 스

lasbe.tistory.com

3가지 의존성 주입에 대한 자세한 내용은 전에 작성한 글에 소개되어 있으니 참고 바랍니다.

반응형

댓글


오픈 채팅