Spring Bean의 Wiring에 대한 정리 by xiaopangnv

VIEWS: 7 PAGES: 9

									Spring Bean의 Wiring에 대한 정리


- 스프링 빈의 의존성을 설정하는 XML 방법
- Annotation 설정


                            천은진
스프링 빈의 의존성을 설정하는 XML 방법
    생성자 방식
생성자를 통해 의존하는 객체를 전달 받는 경우
public class WriteArticleServicempl(
            private ArticleDao articleDao;

           public WriteArticleServicempl(ArticleDao articleDao){
                       this.articleDao = articleDao;
           }
           public void write(Article article){
                       ....
                       articleDao.insert(article);
           }
}


<constructor-arg> 태그를 이용->의존하는 객체전달
<bean name = "writeArticleService"                                           <construtor-arg>
                        class ="madvirus.spring.WriteArticleServicelmpl"/>                          <value> 10 <value/>
           <construtor-arg>                                                  </construtor-arg>
                        <ref been = "articleDao"/>                           <construtor-arg value “10” />
           </construtor-arg>
   <construtor-arg ref been = "articleDao"/>
</bean>
스프링 빈의 의존성을 설정하는 XML 방법
프로퍼티 설정 방식
• setXXXX()형태의 설정 메서드를 사용해서 필요한 객체와 값을 전달 받음
 public class WriteArticleServicempl implement WriteArticleService(

                        private ArticleDao articleDao;

                        public void setArticleDao(Article articleDao){
                                    this.articleDao = articleDao;
                        }
            }


• setXXXX()형태의 메서드에서 프로퍼티 이름은 XXXX가 됨
 <bean name = "writeArticleService"
                      class ="madvirus.spring.WriteArticleServicelmpl"/>
            <property name = "articleDao">
                     <ref been = "mysqlArticleDao"/>
            </property>
 </bean>
스프링 빈의 의존성을 설정하는 XML 방법
XML 네임스페이스를 이용
•<property>태그를 사용하지 않고 좀 더 간단히 설정
 <beans xmlns="http://www.springframework.org/schema/beans"
            xmlns:p="http://www.springframework.org/schema/p"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

 <bean id="monitor" class = "SystemMonitor"
            p:periodTime = "10"
            p:sender-ref = "smsSender"
 />
 </bean>
 <bean id="smsSender" class ="SmsSender"
 />
 </beans>
Annotation 설정
     @Required
    • org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor
    • 필수 프로퍼티를 명시할 때 사용
    • 지정하려면 먼저 프로퍼티 설정 메서드에 @Required을 선언

package com.cejing.ex;

public class Camera {

           private int number;

           @Required

                        public void setNumver(int number){
                                    this.number =number;
           }

}


<bean class = "org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>
<bean id="camera" class = "Camera"/>
<!-- number 프로퍼티에 @Required 어노페이션 적용
           따라서 , number 프로퍼티를 설정하지 않을 경우 예외 발생 -->
           <property name ="number" value="1"/>
           </bean>
   Annotation 설정
           @Required

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
                      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
                      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
           <context:annotation-config/>
</beans>




<context:annotation-config>

- RequiredAnnotationBeanPostProcessor : @Required 어노테이션 처리
- AutoWiredAnnotationBeanPostProcessor : @Autowired 어노테이션 처리
- CommonAnnotationBeanPostProcessor : @Resource, @PostConstruct, @PreDestroy 어노테이션 처리
- ConfigurationClassPostProcessor : @Configuration 어노테이션 처리
Annotation 설정
 @Autowired
• org.springframework.beans.factory.annotation.AutowiredAnnotationBeanProcessor
• 프로퍼티 자동 설정 기능을 제공
• 생성자, 필드, 메서드의 세 곳에 적용 가능

 @Autowired(required=false)
여러 개의 생성자에 @Autowired 어노테이션을 적용할 때에는 한 개의 생성자에 적용된
@Autowired 어노테이션만 required 속성값이 true여야 하며 나머지 생성자에 적용되는
@Autowired 어노테이션의 required 속성값은 false이어야 한다
Annotation 설정
  @Qualifier
• org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor
• @Autowired 어노테이션과 함께 사용
• 자동 연결될 빈 객체의 수식어를 값으로 갖는다

  package com.cejing.ex;                   <bean id="camera" class = "Camera"/>
                                           <qualifier value ="main" />
  public class Camera implements Camera{   </bean>

            @Autowired
            @Qualifier("main")

            private int number;

  }
Annotation 설정
• org.springframework.beans.factory.annotation.CommonAnnotationBeanPostProcessor


 @Resource
     • javax.annotation 패키지에 위치
     • 필요로 하는 자원을 자동 연결할 때 사용


 @PostConstruct / @PreDestroy
    • @PostConstruct 의존하는 객체를 설정한 이후에
       초기화 작업을 수행할 메서드에 적용
    • @PreDestroy 컨테이너에서 개게를 제거하기 전에 호출 될 메서드에 적용
    -> 스프링 설정 파일에서 init-mehtod 속성과 destroy-method속성을 이용하여
       명시한 메서드와 동일한 시점에서 실행

								
To top