BeanDefinition 과 BeanDefinitionReader
- 스프링의 설정 메타정보는 BeanDefinition 인터페이스로 표현되는 순수한 추상 정보이다.
- ApplicationContext 는 BeanDefinition으로 만들어진 오브젝트를 사용해 IoC/DI작업을 수행한다.
- 즉, 스프링 메타정보는 특정한 파일포맷이나 형식에 종속되지 않는다.
- BeanDefinitionReader는 특정 포맷을 BeanDefinition 오브젝트로 만들어준다.
- 즉, 특정한 포맷을 위한 BeanDefinitionReader 만 구현하면, 어떤형태도 사용가능하다.
Java code 로 작성된 configuration metadata
- java 클래스를 bean factory 가 사용할 수 있는 본격적인 설정정보를 만들 수 있다.
- 실질적으로 application context 는 ApplicationContext 타입의 object 로 구현되며, @Configuration이 붙은 자바코드를 설정정보로 사용하려면 AnnotationConfigApplicationContext 를 이용하면서 파라미터로 @Configuration으로 지정된 클래스를 넣어주면 된다.
설정용 Object Factory
import org.springframework.context.annotation.Bean; |
import org.springframework.context.annotation.Configuration; |
.. |
@Configuration // application context or beanfactory 가 사용할 설정 정보임을 표시 |
public class DataFactory { |
@Bean // object 생성을 담당하는 IoC 용 method 임을 표시 |
public UserDao userDao() { |
return new UserDao(connectionMaker()); |
} |
@Bean |
public ConnectionMaker connectionMaker() { |
return new DConnectionMaker(); |
} |
} |
ApplicationContext
2 ) application context |
public class UserDaoTest { |
public static void main(String[] args) throws ClassNotFoundException, SQLException { |
ApplicationContext context = new AnnotationConfigApplicationContext(DaoFactory. class ); |
UserDao dao = context.getBean( "userDao" , UserDao. class ); // method 이름이 bean 의 이름이 된다. |
… |
} |
XML 을 이용한 configuration metadata
- DI 구성이 바뀔때마다 자바코드(오브젝트 팩토리)를 수정하고 클래스를 다시 컴파일 하는 것은 귀챦은 작업이다.
- XML 은 다루기 쉽고, 이해하기 쉽고, 별도의 빌드 작업이 필요없다.
- 클래스 설정과 XML설정의 대응항목
자바코드 XML설정 빈 설정파일 @Congifuration <beans> 빈의 이름 @Bean methodName() <bean id="methodName" 빈의 class return new BeanClass(); class="a.b.c…BeanClass" /> <-- package 포함
- Spring 개발자는 setter method 를 선호하는데, 이는 XML의존관계 정보를 만들때 편리하기 때문이다.
- 즉, java bean의 관례에 따라서 setter method 는 property 가 된다.
- 프로퍼티 이름은 method이름에서 set을 제외한 나머지 부분을 사용한다.
- 예를들어, object에 setConnectionMaker()란 이름의 method 가 있다면 connectionMaker라는 프로퍼티를 갖는다고 할수 있다.
- XML에서는 <property> 태그를 이용해서 의존 오브젝트와의 관계를 정의한다.
- <property> 태그의 속성 중 name은 프로퍼티이름으로 setter method 를 추적한다.
- <property> 태그의 속성 중 ref는 setter method를 통해서 주입해줄 오브젝트의 bean 이름이다. 즉, DI할 오브젝트이다.
UserDao setter를 이용하여 변경
public class UserDao { |
private ConnectionMaker connectionMaker; |
|
public UserDao() { |
} |
|
// setter method DI의 전형적인 코드 |
public void setConnectionMaker(ConnectionMaker connectionMaker) { |
this .connectionMaker = connectionMaker; |
} |
} |
ApplicationConfiguration.xml
<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd" > |
<bean id= "myConnectionMaker" class = "com.lefthand.user.dao.DConnectionMaker" /> |
<bean id= "userDao" class = "com.lefthand.user.dao.UserDao" > |
<property name= "ConnectionMaker" ref= "myConnectionMaker" /> |
</bean> |
</beans> |
댓글 없음:
댓글 쓰기