728x90

XML

애플리케이션 컨텍스트 생성에 사용할 설정정보를 만드는 것은 반복적인 작업이 계속해서 이뤄진다.

DI 구성이 바뀔 때마다 이런 반복적인 작업을 수행하는 것은 번거롭기 때문에

다양한 방법을 통해 이러한 설정정보를 만들 수 있는데 대표적인 방법이 XML이다.

 

XML은 단순한 텍스트 파일이기 때문에 이해하기 쉽고 별도의 빌드 작업이 필요 없고

오브젝트의 관계 변경 사항에 대한 반영이 쉽고 빠르다.

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/beans 
						http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<bean id="빈의 이름" class="빈 생성에 사용할 클래스">
		<property name="set을 뺀 수정자 메서드명" ref="수정자 메서드의 파라미터" />
	</bean>
</beans>

<beans> : @Configuration, 루트 엘리먼트로 사용

<bean> : @Bean, 빈을 정의(빈의 이름, 어떤 클래스를 사용해서 만들지, 의존 오브젝트)

<property> : 빈의 의존관계 정의

애플리케이션 컨텍스트 생성하기 : XML 이용

기존에는 설정정보를 사용하여 애플리케이션 컨텍스트를 생성하기 위해

AnnotationConfigApplicationContext 구현 클래스를 사용하였으니,

XML을 사용하여 생성하기 위해서는 GenericXmlApplicationContext 구현 클래스를 사용한다.

// 기존의 설정파일을 통한 애플리케이션 컨텍스트 생성
AnnotationConfigApplicationContext context = 
	new AnnotationConfigApplicationContext(DaoFactory.class);
    
UserDao dao = context.getBean("userDao", UserDao.class);

// XML을 통한 애플리케이션 컨텍스트 생성
ApplicationContext context = new GenericXmlApplicationContext("XML 설정파일 위치");

DataSource 인터페이스

DataSource 인터페이스는 DB 커넥션을 가져오는 메서드 이외에도 여러 기능을 갖고 있어서

직접 구현해서 사용하기는 어렵다.

 

하지만 이미 해당 인터페이스의 구현 클래스들이 존재하기 때문에 이를 사용하면 된다.

private DataSource dataSource;
	
public void setDataSource(DataSource dataSource) {
    this.dataSource = dataSource;
}

public void add(User user) throws SQLException {
    Connection c = this.dataSource.getConnection();
}

프로퍼티 값의 주입

DB 연결 정보들도 마찬가지로 XML을 통해 설정할 수 있는데

다른 빈 오브젝트의 레퍼런스를 주입하는 것이 아닌 단순한 값을 주입하기 때문에

ref 속성값 대신 value 속성값을 사용한다.

@Bean
public DataSource dataSource() {
    SimpleDriverDataSource dataSource = new SimpleDriverDataSource ();

    dataSource.setDriverClass(com.mysql.jdbc.Driver.class);
    dataSource.setUrl("jdbc:mysql://localhost/springbook?characterEncoding=UTF-8");
    dataSource.setUsername("spring");
    dataSource.setPassword("book");

    return dataSource;
}

위의 코드와 같이 XML을 사용해서 DB의 연결 정보들을 직접 설정해주는 경우에는

연결 정보가 바뀌는 경우에는 코드를 직접 수정해야 하지만

XML을 통해 설정하는 경우에는 코드가 아닌 XML 파일만 수정하면 된다.

<bean id="myConnectionMaker" class="springbook.user.dao.DConnectionMaker">
    <property name="driverClass" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost/springbook?characterEncoding=UTF-8" />
    <property name="username" value="spring" />
    <property name="password" value="book" />
</bean>

value 속성값은 타입을 지정해주지 않아도 상관없는데

스프링이 이 값을 수정자 메서드의 파라미터 타입을 참고해서 형변환 해주기 때문이다.

'Back-End > Spring' 카테고리의 다른 글

JUnit 자세히 알아보기  (0) 2023.06.08
테스트  (0) 2023.06.07
DI(Dependency Injection)  (0) 2023.06.07
싱글톤 레지스트리 / 오브젝트 스코프  (0) 2023.06.07
스프링 IoC  (0) 2023.06.05

+ Recent posts