스프링에선 다양한 방법으로 DI 의존관계 설정정보를 만들 수 있다.
그 중 하나인 XML을 이용한 설정에 대해서 알아보자.
(xml을 이용한 설정은 최근에 많이 사용하지 않는 추세이다.)
1. XML 설정
xml설정에 대한 기본적인 내용에 대해 다룹니다.
더보기
ConnectionMaker() 전환
자바 코드 설정정보 | XML 설정정보 | |
빈 설정파일 | @Configuration | <beans> |
빈의 이름 | @Bean methodName() | <bean id="methodName" |
빈의 클래스 | return new BeanClass(); | class="a.b.c... BeanClass"> |
@Bean ---------------------------------> <bean
public ConnectionMaker
connectionMaker() { -------------------> id="connectionMaker"
return new DConnectionMaker(); ----> class="springbook...DConnectionMaker" />
}
userDao() 전환
<bean id="userDao" class="springbook.dao.UserDao">
<property name="connectionMaker" ref="connectionMaker" />
</bean>
XML의 의존관계 주입 정보
<beans>
<bean id="connectionMaker" class="springbook.user.dao.DConnectionMaker" />
<bean id="userDao" class="springbook.user.dao.UserDao">
<property name="connectionMaker" ref="connectionMaker" />
</bean>
</beans>
<beans>
<bean id="myConnectionMaker" class="springbook.user.dao.DConnectionMaker" />
<bean id="userDao" class="springbook.user.dao.UserDao">
<property name ="connectionMaker" ref="myConnectionMaker" />
</bean>
</beans>
같은 인터페이스 타입의 빈을 여러개 정의한 경우
<beans>
<bean id="localDBConnectionMaker" class="...LocalDBConnectionMaker" />
<bean id="testDBConnectionMaker" class="...TestDBConnectionMaker" />
<bean id="productionDBConnectionMaker" class="...ProductionDBConnectionMaker" />
<bean id="userDao" class="springbook.user.dao.Userdao">
<property name="connectionMaker" ref="localDBConnectionMaker" />
</bean>
</beans>
// userDao를 localDBConnectionMaker로 만들겠다는 얘기
2. XML을 이용하는 애플리케이션 컨텍스트
xml을 이용해 application context를 설정하는 방법에 대해 다룹니다.
더보기
XML 설정정보를 담은 applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlls="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="connectionMaker" class="springbook.user.dao.DConnectionMaker" />
<bean id="userDao" class="springbook.user.dao.UserDao" />
<property name="connectionMaker" ref=connectionMaker" />
</bean>
</beans>
작성해둔 xml파일을 GenericXmlApplication을 통해 ApplicationContext로 생성
ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
3. DataSource 인터페이스로 변환
DataSource 인터페이스 적용
ConnectionMaker는 DB 커넥션을 생성해주는 기능 하나만을 정의한 단순한 인터페이스다.
자바에는 DB 커넥션을 가져오는 오브젝트의 기능을 추상화해 비슷한 용도로 사용할 수 있게 만들어진 DataSource 인터페이스가 이미 존재한다.
DB연결과 풀링 기능을 갖춘 많은 DataSource 구현 클래스가 존재하여 DataSource를 사용하면 된다.
DataSource 인터페이스
package javax.sql
public interface DataSource extends CommonDataSource,Wrapper {
Connection getConnection() throws SQLException;
...
}
DataSource Interface를 활용해 기존 UserDao를 리팩토링하는 방법을 다룹니다.
더보기
DataSource를 사용하는 UserDao
import java.sql.DataSource;
public class UserDao {
private DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public void add(User user) throws SQLException {
Connection c = dataSource.getConnection();
...
}
...
}
자바 코드 설정 방식
DataSource 타입의 dataSource 빈 정의 메소드
@Bean
public DataSource dataSource() {
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
//DB 연결정보를 setter로 넣어준다. 이렇게 하면 오브젝트 레벨에서 DB 연결 방식을 변경가능
dataSource.setDriverClass(com.mysql.cj.jdbc.Driver.class);
dataSource.setUrl("jdbc:mysql://localhost/springbook?serverTimezone=Asia/Seoul&useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false");
dataSource.setUsername("spring");
dataSource.setPassword("book");
return dataSource;
}
DataSource 타입의 빈을 DI받는 userDao() 빈 정의 메소드
@Bean
public UserDao userDao() {
UserDao userDao = new UserDao();
userDao.setDataSource(dataSource());
return userDao;
}
xml로 dataSource 생성하기
<bean id="dataSource"
class="org.springframework.jdbc.dataSource.SimpleDriverDataSource" />
4. 프로퍼티 값의 주입
XML을 이용하여 dataSource에 연결정보를 주입하는 내용에 대해 다룹니다.
더보기
// 코드를 통한 DB 연결정보 주입
dataSource.setDriverClass(com.mysql.cj.jdbc.Driver.class);
dataSource.setUrl("jdbc:mysql://localhost/springbook?serverTimezone=Asia/Seoul&useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false");
dataSource.setUsername("spring");
dataSource.setPassword("book");
==>
// XML을 이용한 DB 연결정보 설정
<property name="driverClass" value="com.mysql.cj.jdbc.Driver" /> // 해당 텍스트를 class object로 인식
<property name="url" value="jdbc:mysql://localhost/springbook?serverTimezone=Asia/Seoul&useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false" />
<property name="username" value="spring" />
<property name="password" value="book" />
DataSource를 적용 완료한 applicationContext.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="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver" /> // 해당 텍스트를 class object로 인식
<property name="url" value="jdbc:mysql://localhost/springbook?serverTimezone=Asia/Seoul&useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true&useSSL=false" />
<property name="username" value="spring" />
<property name="password" value="book" />
</bean>
<bean id="userDao" class="springbook.user.dao.UserDao">
<property name="dataSource" ref="dataSource" />
</bean>
</beans>
'BackEnd > Spring & Springboot Study' 카테고리의 다른 글
[토비의 스프링] 2.1 UserDaoTest 다시 보기 (0) | 2022.12.12 |
---|---|
[토비의 스프링] 1장 정리 [IoC와 DI] (0) | 2022.12.08 |
[토비의 스프링] 1.7 의존관계 주입(DI) (0) | 2022.12.04 |
[토비의 스프링] 1.6 싱글톤 레지스트리와 오브젝트 스코프 (0) | 2022.12.03 |
[토비의 스프링] 1.5 스프링의 Ioc (0) | 2022.12.02 |