공부한것들을 정리하는 블로그 입니다.
3. 비즈니스 컴포넌트 실습(Annotation + JDBC + maven) 본문
3. 비즈니스 컴포넌트 실습(Annotation + JDBC + maven)
호 두 2019. 6. 14. 15:48이번 글에서는 일반적으로 프로젝트에서 사용하는 구조로 비즈니스 컴포넌트를 구현하는 실습을 진행해보도록 하겠습니다.
1. BoardWeb 프로젝트의 설정파일 applicationContext.xml 수정
2. JDBC 드라이브 추가 및 maven 수정 + Marker탭에서 Problem 출력 해결
3. JDBCUtil, BoardVO, BoardDAO, BoardService, BoardServiceImpl,BoardServiceClient, BoardListVO 추가
1. BoardWeb 프로젝트의 설정파일 applicationContext.xml 수정
(*2020.01.03 : 오랜만에 와봤는데 코드블럭 내의 소스코드가 깨져있네요.. 티스토리 개편되면서 날라갔나봅니다. 정확히 기억이 안나는 관계로 우선은 간단하게 작성해놓겠습니다..)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
<context:component-scan base-package="com.springbook.biz"></context:component-scan>
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
<!-- DataSource setting -->
<context:property-placeholder location="classpath:config/database.properties" />
<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- Spring JDBC -->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- Transaction setting -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean> -->
<!-- Transaction advice setting -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="*" />
</tx:attributes>
</tx:advice>
<!-- AOP 설정을 통한 트랜잭션 적용 -->
<aop:config>
<aop:pointcut id="txPointcut" expression="execution(* com.springbook.biz..*(..))" />
<aop:advisor pointcut-ref="txPointcut" advice-ref="txAdvice" />
</aop:config>
</beans>
2. pom.xml에서 jdbc 관련 항목을 추가한다. (아래 캡쳐 참고)
이때 Marker탭에서 상기 Problem들이 출력되는데, 이것을 해결하는 방법도 적어본다. (아래 캡쳐 참고)
problems :
- Dynamic Web Module 3.1 requires Java 1.7 or newer.
- One or more constraints have not been satisfied.
pom.xml 수정 전
pom.xml 수정 완료. 추가로 maven repositoty에서 검색해서 최신버젼으로 수정해주었다
오히려 problem이 하나 추가되었지만 신경 쓸 것 없다. maven update 하고나면 사라진다.
problems 모두 사라진 모습
그래도 남아있는 java problems(not issue)는 더블클릭해서 들어간 후 해결해주면 된다.
대부분 필요없는 클래스 등이 import 되어있다는 거라서, 그냥 해당 페이지에서 ctrl + shift + o 하거나 ctrl+1로 처리하면 된다
3. JDBCUtil, BoardVO, BoardDAO, BoardService, BoardServiceImpl, BoardServiceClient, BoardListVO 추가
client 기능을 하는 BoardServiceClient 만 따로 설명하고 그 외에는 전부 파일첨부만 하고 넘어가도록 하겠다
package com.springbook.biz.board;
import java.util.List;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
public class BoardServiceClient {
public static void main(String[] args) {
AbstractApplicationContext container =
new GenericXmlApplicationContext("applicationContext.xml");
BoardService boardService = (BoardService)container.getBean("boardService"); // @Service("boardService") : BoardServiceImpl
// 게시글 입력
BoardVO vo = new BoardVO();
vo.setTitle("임시 제목");
vo.setWriter("홍길동");
vo.setContent("임시 내용...........");
boardService.insertBoard(vo);
System.out.println("[" + BoardServiceClient.class.getSimpleName() + "] " + vo.toString());
// vo 초기화
boardService.cleanUp(vo);
System.out.println("[" + BoardServiceClient.class.getSimpleName() + "] " + vo.toString());
// 게시글 조회
vo.setSearchCondition("TITLE");
List boardList = boardService.getBoardList(vo);
for(BoardVO board: boardList) {
System.out.println("[boardList] " + board.toString());
}
container.close();
}
}
캡처해놓고 보니 딱히 설명할 필요도 없는 수준이라서 그냥 넘어가도록 하겠다.
annotation도 필요한 것을 더 자세히 찾아보는걸 추천합니다.
@Autowired
: 주로 변수위에 설정하여 해당 타입의 객체를 찾아서 자동으로 할당한다.
@Qualifier
: 특정 객체의 이름을 이용하여 의존성 주입할 때 사용한다.
@inject
: @Autowired와 동일한 기능을 제공한다
@Resource
:@Autowired와 @Qualifier의 기능을 결합한 어노테이션이다.
@Service
위치 : *ServiceImpl
@Repository
위치 : *DAO
@Controller
위치 : *Controller
'(2019) 사이드 프로젝트 > BoardWeb(게시판-MVC1,MVC2,스프링MVC)' 카테고리의 다른 글
4-2. 관심분리(횡단관심) : LogAdvice를 Log4Advice로 교체, pointcut엘리먼트 사용, XML설정을 Annotation설정으로 교체 (0) | 2019.06.17 |
---|---|
4.1 oracle error 해결 : Socket read interrupted, Authentication lapse 0 ms. (0) | 2019.06.17 |
4. 스프링 AOP : log4j 설정 (0) | 2019.06.14 |
3-1. 비즈니스 컴포넌트 실습2 (0) | 2019.06.14 |
2-2. 다형성 예제 실습(polymorphism) (0) | 2019.06.14 |
2-1. IoC컨테이너 학습 : Servlet 클래스 만들어보기(not POJO) (0) | 2019.06.13 |
2. 프로젝트 진행을위해 기존파일들 삭제 및 셋팅 수정 (0) | 2019.06.12 |
1-1. 중간점검 (0) | 2019.06.12 |