날아라쩡글이의 블로그입니다.
느슨한 결합, DB 연결 본문
728x90
반응형
의존성 주입
- SampleController는 UserService와 ProductService에 의존하고 있다.
- 즉, UserService와 ProductService에 대한 구현객체가 필요하다.
- SampleController는 자신이 의존한 객체의 구체적인 이름대신 인터페이스에 대한 정보만 가지고 있다.
- SampleController객체가 실제로 사용하게 될 객체는 spring Container가 bean설정 정보를 로딩해서 객체 생성하고, 조립하는 시점에 결정된다.
- 소스네벨에서 의존하는 객체가 결정되어 있으면, 의존하는 객체를 변경해야할 때, 소스를 수정하고, 컴파일을 다시해야한다.
- 의존성 주입을 사용하면, 소스 코드 수정없이 환경설정파일에서 의존성 주입할 객체를 변경하기만 하면 된다.
- 둘이 느슨하게 결합되어 있기 때문이다.
spring
- 의존과 구현이 진행되도록, 인터페이스를 가운데에 넣어서 작성한다.
- 인터페이스를 둬서 구현클래스들 끼리, 연결되게 만들 수 있다.
- 구현클래스를 일부러 적을 필요는 없다.
- 환경설정파일에서 샘플코드 수행없이 확장에는 열려있고 변화에는 닫혀있는 형태를 가지고 있다.
- OCP(open-closed-principle)이다.
- 확장에는 개방적이고, 변경에는 폐쇄적이어야한다.
- Service구현 객체는 연결이 되지만, 코드를 변경하지 않아도 객체가 변경이 된다.
- 확장에는 열려있고, 변경에는 닫혀있어야하는
- OOP(객체지향개발) 방식 5가지중에 하나이다.
- 느슨하게 결합이 되는 것이 더 좋다.
- 의존성을 주입시킴으로써, 자연스럽게 확장성이 높아지고 변화에는 닫혀있다.
- Spring Container가 조립/생성하게 하라.
- @Controller에 구체적인 클래스의 정보를 주지 말고, interface의 정보만 주는 것이 중요하다.
Database 연결
- Spring의 경우 객체를 bean에서 등록한 후 사용하는 방법으로 진행해야한다.
- 데이터베이스와 연결된 Connection을 제공하는 객체를 스프링의 bean으로 등록한다.
- 커넥션 풀 : Connection Pool 객체라고 불린다.
- 모든 Connection Pool객체는 javax.sql.DataSource인터페이스를 구현한 객체이다.
- 모든 Connection Pool객체는 Connection을 가져오는 방법은 getConnection으로 사용방법이 모두 동일하다.
- Commons-dbcp 라이브러리가 제공하는 BasicDataSource는 가장 일반적으로 많이 사용되는 DataSource구현체이다.
- jdbc 드라이버 클래스명, 데이터베이스 접속 URL, 사용자명, 비밀번호를 제공해야한다.
- <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@LAPTOP-MP9I3VRU:1521:xe"></property>
<property name="username" value="hr"></property>
<property name="password" value="zxcv1234"></property>
</bean> - 이전 getConnection으로 전달했던 값을 property로 설정해주어야한다.
- 데이터베이스에 대한 CRUD 작업을 처리해주는 객체를 스프링의 bean으로 등록시킨다.
- spring-jdbc 라이브러리는 jdbcTemplate클래스를 제공한다.
- JdbcTemplate클래스는 Insert, Update, Delete, Select쿼리문을 간단하게 실행할 수 있는 메소드를 제공한다.
- 패키지명이 길기 때문에 자동완성하지 않으면 작성하기 어렵다.
- 커넥션을 제공하는 ConnectionPool객체를 제공해야한다.
- <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
- 업무로직 구현에 필요한 데이터베이스 작업이 구현된 EmployeeDaoImpl을 스프링의 bean으로 등록시킨다.
- <bean id="employeeDao" class="com.sample.dao.EmployeeDaoImpl">
<property name="template" ref="jdbcTemplate"></property>
</bean>
<bean id="departmentDaoImpl" class="com.sample.dao.EmployeeDaoImpl">
<property name="template" ref="jdbcTemplate"></property>
</bean>
<bean id="locationdaoImpl" class="com.sample.dao.EmployeeDaoImpl">
<property name="template" ref="jdbcTemplate"></property>
</bean>
<bean id="jobDaoImpl" class="com.sample.dao.EmployeeDaoImpl">
<property name="template" ref="jdbcTemplate"></property>
</bean>
- <bean id="employeeDao" class="com.sample.dao.EmployeeDaoImpl">
- 업무로직이 구현된 EmployeeServiceImpl을 스프링의 bean으로 등록시킨다.
- <bean id="employeeServiceImpl" class="com.sample.service.EmployeeServiceImpl">
<property name="employeeDao" ref="employeeDaoImpl"></property>
<property name="departmentDao" ref="departmentDaoImpl"></property>
<property name="jobDao" ref="jobDaoImpl"></property>
</bean>
<bean id="departmentServiceImpl" class="com.sample.service.EmployeeServiceImpl">
<property name="departmentDao" ref="departmentDaoImpl"></property>
<property name="jobDao" ref="jobDaoImpl"></property>
</bean>
- <bean id="employeeServiceImpl" class="com.sample.service.EmployeeServiceImpl">
- 완성
반응형
'중앙 HTA (2106기) story > spring java framwork story' 카테고리의 다른 글
web.xml, spring Container (0) | 2021.12.29 |
---|---|
DB Access 방법 (CRUD) (0) | 2021.12.28 |
의존성 주입의 수동 주입 방법 (0) | 2021.12.27 |
spring framwork설명 (0) | 2021.12.27 |
의존성 주입 (DI) 자동 주입 (0) | 2021.12.27 |
Comments