SPRING - bean 등록과 ComponentScan

Hailey·2025년 3월 1일

SPRING

목록 보기
2/15

1. Bean 추출하기(id/메타정보=타입 이용) - 등록했다고 가정

ApplicationContext를 사용한 스프링 컨테이너 생성

ApplicationContext context = new GenericXmlApplicationContext("section01/xmlconfig/spring-context.xml");

GenericXmlApplicationContext를 사용하여 spring-context.xml 파일을 로드합니다. 이 XML 파일에는 스프링 빈 설정 정보가 들어 있으며, 빈 객체가 생성되고 스프링 컨테이너에서 관리됩니다.

MemberDTO 빈 가져오기

//1.bean 의 id를 가지고 컨테이너에서 추출
MemberDTO member = (MemberDTO)context.getBean("member");

//2.bean타입을 전달하여 추출
MemberDTO member = context.getBean(MemberDTO.class);

//3. bean의 id와 클래스의 메타 정보를 전달하여 추출
MemberDTO member = context.getBean("member",MemberDTO.class);

@configuration으로 Bean을 등록하고 만들기가 선행되었다고 가정


2. xml 으로 Bean 등록하는 방법

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- MemberDTO bean 등록 -->
    <bean id="member" class="com.ohgiraffers.common.MemberDTO">
        <constructor-arg index="0" value="1"/>
        <constructor-arg name="id" value="user01"/>
        <constructor-arg index="2"><value>pass01</value></constructor-arg>
        <constructor-arg name="name"><value>홍길동</value></constructor-arg>
    </bean>

</beans>

이 XML 파일은 Spring의 빈(Bean) 설정 파일로, MemberDTO 객체를 스프링 컨테이너에서 관리하도록 설정하는 역할을 합니다.

  1. Spring 컨테이너(ApplicationContext)가 spring-context.xml을 로드.
  2. PersonalAccount 객체가 먼저 생성되고 account 빈으로 등록됨.
  3. MemberDTO 객체가 생성된 후, 세터(setter) 방식으로 데이터가 주입됨.
  4. Application.java에서 context.getBean(MemberDTO.class)를 호출하면, 위에서 설정한 member 빈이 반환됨.

3. Annotation 으로 Bean 등록하는 방법(lombok 이용)

@Configuration 설정파일!

@Configuration("config1")
public class ContextConfiguration {

    @Bean("member")
    public MemberDTO getMember() {
        return new MemberDTO(1, "user01", "pass01", "홍길동");
    }
}

@Configuration: 이 클래스가 Spring의 설정 클래스임을 나타냅니다.
기존의 spring-context.xml을 Java 코드로 대체할 때 사용.

@Bean("member"): getMember() 메서드가 반환하는 객체를 Spring 빈(Bean)으로 등록.
"member"라는 이름으로 빈이 생성됨.

getMember() 메서드: MemberDTO 객체를 직접 생성하여 반환. Bean이름이 등록되지 않으면 메서드이름이 빈의 이름이 된다.


4. Bean Filtering 하기 - ComponentScan (annotation방법)

범위를 bean으로 등록하는 방법을 다룬다.

1. 기본 컴포넌트 스캔@ComponentScan(basePackages="com.ohgiraffers")

/ 설명. 1. 기본적으로는 설정파일이 있는 패키지 및 하위만 Scan하지만 basePackages를 바꾸면 다른 범위까지 가능하다. /

@Configuration
@ComponentScan(basePackages = "com.ohgiraffers")

설명. 2. 범위 및 필터를 적용해서 제외하고자 하는 bean을 등록하는 경우(excludeFilters)

2. type 이나 annotation으로 제외(excludeFilters-블랙리스트 방식)

3. type이나 annotation으로 포함(includeFilters- 화이트리스트)

/ 설명. 3. 범위 및 필터를 적용해서 등록하고자 하는 bean을 등록하는 경우(includeFilters) /

또한 scan범위(basePackages)를 지역적으로 여러 개를 둘 수 있다.

@ComponentScan(basePackages = {"com.ohgiraffers", "com"},
                useDefaultFilters = false,                      // 현재 설정 파일 bean 제외 나머지는 off
                includeFilters = {
                    @ComponentScan.Filter(
                            type=FilterType.ASSIGNABLE_TYPE,
                            classes = {MemberDAO.class}         // MemberDAO 타입 bean만 등록
                    )
                })

profile
럭키헤일리

0개의 댓글