[Spring 3일차] 자바 2.5 버전

이경영·2022년 10월 14일
0

스프링부트

목록 보기
4/12

Spring Annotation

  • Spring 2.5 버전부터는 Annotation을 많이 사용
  • Annotation은 자바 소스코드에 추가하여 사용 할 수 있는 메타데이터의 일종
  • class, method에 추가하면 특별한 기능을 만들어 사용가능

@Controller : Controller의 역할을 하여 @Controller로 명시후 사용
@Service : Service 역할을 하는 클래스를 보통 @Service로 명시하여 사용
@Repsository : DAO, mapper, JPA등 데이터 저장소를 맵핑 또는 호출해주는 곳들을 보통 @Repository로 선언하고 사용함
@RequestMappting: class, method에 url맵핑을 제공함.

2.5버전 ~ 3.1 장점/장점

  • 장점

    • 1개의 클래스에 여러개의 url맵핑이 가능하며 기능별로 묶어서 개발/관리 가능
    • 클래스, 메소드에 어떤 url로 맵핑이 되어 호풀되는지 명확
    • Framework 구조 및 설정하는 위치가 확실하여 관리에 좋음
    • 설정/비즈니스 로직이 분리되어 좋음
  • 단점

    • 어노테이션으로 빈이 생성 및 주입과정이 직관적이지 않아 초기 이해가 어려울 수 있다.

2.5 버전 변경된것

dispatcher.servlet.xml 변경

spring에서 제공하는 component-scan 기능은 어노테이션으로 선언된 패키지를 찾아서 스캔해주는 역할을 함.
base-package를 넣지 않는 경우 모든 패키지를 대상으로 스캔
기입하는 경우는 해당 패키지 시작점~ 패키지 하위까지 모두 스캔함.

<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jee="http://www.springframework.org/schema/jee"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="
 http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-2.5.xsd
 http://www.springframework.org/schema/aop 
 http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
 http://www.springframework.org/schema/tx 
 http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
 http://www.springframework.org/schema/jee 
 http://www.springframework.org/schema/jee/spring-jee-2.5.xsd
 http://www.springframework.org/schema/mvc 
 http://www.springframework.org/schema/mvc/spring-mvc-2.5.xsd"
>
	<!-- example 패키지를 스캔 (@controller, @service, @repository, @component) -->
	<context:component-scan base-package="example" />
	
	<!-- JSP View resolver -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

	

</beans>

application.context.xml파일

application-context.xml
- spring-orm에서 ibatis를 지원해주는 sqlMapClientTemplate를 사용하도록 빈 등록

<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-2.0.xsd"
>
	<!-- 프로퍼티 -->
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:/config/properties/database.properties"/>
		<property name="fileEncoding" value="UTF-8" />
	</bean>

	<!-- dataSource bean 설정 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
		<property name="driverClassName" value="${database.driverClassName}" />
		<property name="url" value="${database.url}" />
		<property name="username" value="${database.username}" />
		<property name="password" value="${database.password}" />
	</bean>
	
	<!-- ibatis --> 
	<!-- class 이름 바뀜 -->
	<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation" value="classpath:config/ibatis/sql-map-config.xml" />
		<property name="dataSource" ref="dataSource" />
	</bean>	
	
	<!-- dao에서 사용할 빈 등록 -->
	<bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
		<constructor-arg index="0" ref="dataSource"/>
		<constructor-arg index="1" ref="sqlMapClient"/>
	</bean>
	
	<!-- 주입 삭제됨 --> 

</beans>

Controller변경

BoardListController.java
@Controller 어노테이션을 선언하면 컨트롤러대상으로 스캔이된다.
추후에 DispatcherServlet으로 요청이 /board/list URL이면 BoardController에 list메소드가 호출된다.

JSP / Servlet을 사용할때는request.setAttribute로 key, value를 저장해서 사용했지만 controller 사용시 modelMap.setAttribute를사용하면 jsp에서 해당 value가 사용가능하다

package example.controller;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import example.service.BoardService;

@Controller
public class BoardController {

	final Logger logger = LogManager.getLogger(getClass());
	
	@Autowired
	private BoardService boardService;
	
	/**
	 * 게시물 목록 조회 및 화면
	 * @param model
	 * @return
	 */
	@RequestMapping(value = "/board/list", method = RequestMethod.GET)
	public String list(ModelMap model) {
		// 게시물 목록 조회 후 model에 boardList key로 저장
		model.addAttribute("boardList", boardService.selectBoardList());
		// jsp를 호출
		return "/board/list";
	}
	

}

BoardDao 변경

  • 기존 xml에서 bean으로 등록했던 부분들
    @Reposotory에서 선언으로 대체하면 자동으로 빈으로 등록됨
    @Autowired로 선언된 변수는 application-context.xml에 등록된 빈과 자동으로 주입된다.
package example.dao;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class BoardDao {
	
	@Autowired
	private SqlMapClientTemplate sqlMapClientTemplate;

	@SuppressWarnings("unchecked")
	public List<Board> selectBoardList(){
		return sqlMapClientTemplate.queryForList("selectBoardList");
	}

	
	public Board selectBoard(int boardSeq){
		return (Board) sqlMapClientTemplate.queryForObject("selectBoard", boardSeq);
	}
	
	
	public void insertBoard(Board board){
		sqlMapClientTemplate
			.insert("insertBoard", board);
	}
	
	public void deleteBoard(int boardSeq){
		sqlMapClientTemplate
			.insert("deleteBoard", boardSeq);
	}


	public void updateBoard(Board board){
		sqlMapClientTemplate
		.update("updateBoard", board);
	}
	

	
}
profile
꾸준히

0개의 댓글