개발/Spring

SPRING_빈(Bean)

Zziny 2021. 10. 12. 02:06

Bean

- Spring IoC 컨테이너가 관리하는 자바 객체를 Bean이라는 한다.

- Spring에서 Bean은 ApplicationContext가 알고있는 객체를 의미한다.

 

Spring IoC 컨테이너에 Bean 등록

- Spring Bean Configuration File에서 직접 등록

// Bean 등록
<bean id="lee" class="test01.Address">
    <constructor-arg name="name" value="이순신"/>
    <constructor-arg name="address" value="서울시 강남구"/>
    <constructor-arg name="phone" value="010-1111-1111"/>
</bean>

<bean id="hong" class="test01.Address">
    <property name="name" value="홍길동"/>
    <property name="address" value="경기도 수원시"/>
    <property name="phone" value="010-2222-2222"/>
</bean>

// Factory method 등록
<bean id="dayInfo" class="test02.DayFactory" factory-method="getInstance" />

// 등록된 Bean을 변수 값으로 사용 시
<bean id="beanTest" class="test03.BeanTest">
	// Bean id를 ref에 담기
    <constructor-arg ref="date"/>
    <property name="score" ref="scoreBean"/>
    <property name="number" value="25"/>
    <property name="map">
      <map>
        <entry>
          <key>
            <value>spring</value>
          </key>
          <value>봄</value>
        </entry>
        <entry key="summer" value="여름"/>
        <entry key="autumn" value="가을"/>
        <entry key="winter" value="겨울"/>
      </map>
    </property>
    <property name="properties">
      <props>
        <prop key="sky">하늘</prop>
        <prop key="ground">땅</prop>
      </props>
    </property>
    <property name="scoreList">
      <list>
        <bean class="test03.Score">
          <constructor-arg value="오일남"/>
          <constructor-arg value="100"/>
          <constructor-arg value="100"/>
          <constructor-arg value="100"/>
        </bean>
        <ref bean="scoreBean"/>
      </list>
    </property>
</bean>

- base-package 안에 있는 Component, Controller, Service, Repository, Configuration 어노테이션이
자동으로 ApplicationContext에 등록 ( Namespaces > context 추가)

// Spring Bean Configuration File에 context-scan 사용 base-package 지정
<context:component-scan base-package="test02"/>

@Component

- 생성한 클래스의 인스턴스를 자동으로 ApplicationContext에 등록

- 사용 시 value 속성을 지정 안하면 클래스명을 id의 default값으로 가짐

 

@Autowired

- 속성의 타입으로 등록된 bean을 찾아서 자동으로 주입

@Qualifier(value="변수명")

- 만약 (같은) 타입으로 등록된 bean이 여러 개인 경우, 변수명을 기준으로 다시 탐색

 

@Configuration

- Spring Bean Configuration File에서 하던 Bean 등록을 자바의 클래스에서 할 수 있게끔 해주는 어노테이션

 

@Bean

- @Bean 어노테이션이 선언되어있는 메서드가 return 하는 객체를 Bean으로 등록

- Bean의 아이디는 메서드이름을 따라간다.