관리 메뉴

공부한것들을 정리하는 블로그 입니다.

3. 비즈니스 컴포넌트 실습(Annotation + JDBC + maven) 본문

(2019) 사이드 프로젝트/BoardWeb(게시판-MVC1,MVC2,스프링MVC)

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

 

 

 

 

 

BoardDAO.java
0.00MB
BoardListVO.java
0.00MB
BoardService.java
0.00MB
BoardServiceClient.java
0.00MB
BoardServiceImpl.java
0.00MB
BoardVO.java
0.00MB
JDBCUtil.java
0.00MB

반응형
Comments