90 likes | 352 Views
Spring Bean 의 Wiring 에 대한 정리. - 스프링 빈의 의존성을 설정하는 XML 방법 - Annotation 설정. 천은진. 스프링 빈의 의존성을 설정하는 XML 방법. 생성자 방식. 생성자를 통해 의존하는 객체를 전달 받는 경우. public class WriteArticleServicempl( private ArticleDao articleDao; public WriteArticleServicempl(ArticleDao articleDao){
E N D
Spring Bean의 Wiring에대한정리 - 스프링빈의의존성을설정하는 XML 방법 - Annotation 설정 천은진
스프링빈의의존성을설정하는 XML 방법 생성자 방식 생성자를 통해 의존하는 객체를 전달 받는 경우 publicclass WriteArticleServicempl( private ArticleDao articleDao; public WriteArticleServicempl(ArticleDao articleDao){ this.articleDao = articleDao; } publicvoid write(Article article){ .... articleDao.insert(article); } } <constructor-arg> 태그를 이용->의존하는 객체전달 • <construtor-arg> • <value> 10 <value/> • </construtor-arg> • <construtor-arg value “10”/> • <beanname = "writeArticleService" • class ="madvirus.spring.WriteArticleServicelmpl"/> • <construtor-arg> • <refbeen = "articleDao"/> • </construtor-arg> • <construtor-arg refbeen = "articleDao"/> • </bean>
스프링빈의의존성을설정하는 XML 방법 프로퍼티 설정 방식 • setXXXX()형태의 설정 메서드를 사용해서 필요한 객체와 값을 전달 받음 publicclass WriteArticleServicempl implement WriteArticleService( private ArticleDao articleDao; publicvoidsetArticleDao(Article articleDao){ this.articleDao = articleDao; } } • setXXXX()형태의 메서드에서 프로퍼티 이름은 XXXX가 됨 <beanname = "writeArticleService" class ="madvirus.spring.WriteArticleServicelmpl"/> <propertyname = "articleDao"> <refbeen = "mysqlArticleDao"/> </property> </bean>
스프링빈의의존성을설정하는 XML 방법 XML 네임스페이스를 이용 •<property>태그를 사용하지 않고 좀 더 간단히 설정 <beansxmlns="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"> <beanid="monitor"class = "SystemMonitor" p:periodTime = "10" p:sender-ref = "smsSender" /> </bean> <beanid="smsSender"class ="SmsSender" /> </beans>
Annotation 설정 @Required • org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor • 필수 프로퍼티를 명시할 때 사용 • 지정하려면 먼저 프로퍼티 설정 메서드에 @Required을 선언 package com.cejing.ex; publicclass Camera { privateintnumber; @Required publicvoid setNumver(int number){ this.number =number; } } <beanclass = "org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/> <beanid="camera"class = "Camera"/> <!-- number 프로퍼티에 @Required 어노페이션 적용 따라서 , number 프로퍼티를 설정하지 않을 경우 예외 발생 --> <propertyname ="number"value="1"/> </bean>
Annotation 설정 @Required <?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="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; publicclass Camera implementsCamera{ @Autowired @Qualifier("main") privateintnumber; } <beanid="camera"class = "Camera"/> <qualifiervalue ="main"/> </bean>
Annotation 설정 • org.springframework.beans.factory.annotation.CommonAnnotationBeanPostProcessor @Resource • javax.annotation 패키지에 위치 • 필요로 하는 자원을 자동 연결할 때 사용 @PostConstruct / @PreDestroy • • @PostConstruct 의존하는 객체를 설정한 이후에 • 초기화 작업을 수행할 메서드에 적용 • • @PreDestroy 컨테이너에서 개게를 제거하기 전에 호출 될 메서드에 적용 • -> 스프링 설정 파일에서 init-mehtod 속성과 destroy-method속성을 이용하여 • 명시한 메서드와 동일한 시점에서 실행