파게로그

[Spring MVC] 서비스 객체, Connection 분리하기 본문

콤퓨타 왕기초/Spring

[Spring MVC] 서비스 객체, Connection 분리하기

파게 2021. 5. 1. 15:57

서비스 객체의 결합력을 낮추기

서비스 객체를 다른 객체(다른 구현기술)로 바꾸려면?

 

service:JDS - JDS(JDBCService) - DB

                 JPS(JPAService)

                 MyBatis

                 ...

 

지금 service:JDS에서 알 수 있듯이 결합력이 너무 높음.

교체를 용이하도록 하기 위해 결합력을 낮추게, 인터페이스를 추가해준다.

 

service:S - <<interface>> S(Service) - JDBCService or JPAService - DB

 


 

Service에다가 Connection 정보(url, uid, pwd, driver 등)을 직접 넣어두면 배포 후 변경이 불가능하므로 재컴파일, 재배포 등의 과정이 필요하다.

 

JDBEmpService 클래스에다가

private DataSource dataSource;   // import javax.sql.DataSource;

public void setDataSource(DataSource dataSource) {

  this.dataSource = dataSource;

}

 

그리고 기존의

Class.forName(driver);

Connection con = DriverManager.getConnection(url, uid, pwd);

는 다음과 같이 대체한다.

Connection con = dataSource.getConnection();

 

 

그리고 xml에서

<bean id="empService" class="com.ddoongi.web.service.jdbc.JDBCEmpService">
  <property name="dataSource" ref="dataSource" />
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
  <property name="url" value="jdbc:oracle:thin:@localhost:1521/xepdb1" />
  <property name="username" value="c##berry" />
  <property name="password" value="straw" />
</bean>

 

그리고 DriverManagerDataSource 사용을 위해 메이븐 dependencies에 org.springframework spring-jdbc을 추가해준다.

Comments