'자바/스프링'에 해당되는 글 9건
- 2009/01/14 드디어! 스프링소스에서 직접하는 스프링 교육을 서울에서 하는군요.
- 2008/07/24 Spring 3.0
- 2008/07/18 Spring MVC의 C를 JRuby로 구현하기
- 2008/02/23 ResourceBundle 파일의 한글문제
- 2007/12/22 스프링의 Resource 클래스
- 2007/06/27 스프링 팀에서 사용하는 코딩컨벤션
- 2007/05/25 스프링을 이용하여 트랜잭션 처리하기
- 2007/05/15 자바로 웹 개발 쉽게 하기
- 2007/05/13 스프링MVC에서 redirect URL에 매개변수 넘기기
- Moves to Java 5+ basis
- Further improvements in Spring MVC will provide a unified programming model between Spring MVC and Spring Web Flow to handler the full range of web programming requirements
- Comprehensive REST support across Spring MVC and Spring Web Services
출처: http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-6169.pdf?cid=925649
import org.springframework.context.support.ReloadableResourceBundleMessageSource;config.xml 번들 파일입니다.
ReloadableResourceBundleMessageSource bundle = new ReloadableResourceBundleMessageSource();
bundle.setBasename("config"); // config.xml, config.properties 등의 파일을 찾도록 설정
bundle.setCacheSeconds(60); // 1분 단위로 설정 파일 변경 여부 검사
bundle.getMessage("greeting", new String[] {"cybaek"}, null); // 세 번째 인자는 Locale
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties version="1.0">
<entry key="greeting">Hello {0}!</entry>
</properties>
참조:
스프링 레퍼런스: http://static.springframework.org/spring/docs/2.5.x/api/index.html
스프링 소스: spring-framework-2.5.1/test/org/springframework/context/support/ResourceBundleMessageSourceTests.java
자원을 읽을 때 클래스패스에 있는 파일을 이용할 수도 있고, 절대 패스를 지정할 수도 있고, 바이트 배열로 받을 수 도 있습니다.
이런 다양한 접근 방법을 추상화한 결정체가 Resource 클래스입니다.
자바의 기본 객체처럼 유용한 클래스입니다. 실 사용예는 다음에 소개하도록 하겠습니다.
스프링 프레임워크 개발팀에서 사용하는 코딩 컨벤션 파일입니다. 이클립스를 쓰고 계신다면 바로 내려받으세요. 다음 링크 맨 아래에 있습니다.
http://www.springframework.org/development
스트럿츠 사이트에 가면 사람들의 사고를 굳게 하는 보기 프로그램이 하나 있습니다. getConnectioin() 메소드로 디비 연결 객체를 가져와 뭔가 작업을 하고 커밋을 하는 아주 간단한 예제입니다.
많은 사람들이 그 예제에서 출발합니다. 물론 저도 그랬습니다. :)
서비스 객체간 트랜잭션을 처리하는 경우엔 콘트롤러에서 받아온 연결 객체를 서비스(Service, Manager, Bo 등등) 객체로 넘깁니다. 서비스 객체는 넘겨 받은 연결 객체를 이용해서 데이터를 처리합니다. 당연히 서비스 객체간 트랜잭션 관리는 콘트롤러에서 담당합니다.
데이터접근객체(DAO)간에만 트랜잭션 관리를 하는 경우엔 굳이 콘트롤러에서 커넥션을 만들 필요도 서비스에 넘길 필요도 없습니다. 서비스 객체에서 데이터 연결 객체를 만들고 트랜잭션 관리까지 다 맡으면 됩니다.
콘트롤러와 서비스 객체는 상황에 따라 트랜잭션 관리 코드가 들어가기도 하고 안들어가기도 하고 디비 연결 객체를 가져오기도 하고 안 가져오기도 하고. 일관성이 없습니다. (지저분합니다. AOP에서 말하는 횡단관심사이죠)
이런 상황은 정말 빈번하고 아주 아주 일반적인 상황입니다. 이런 경우(빈번하고 일반적인 상황)엔 대게 이미 솔루션이 있습니다. ^^
스프링 프레임워크에선 아래와 같은 설정만으로 아주 쉽게 트랜잭션 관리를 할 수 있습니다.
1. xml 파일에 아래 정보를 등록합니다.
2. 원하는 클래스나 메소드 앞에 “@Transactional”을 붙이면 그것으로 충분합니다.<aop:aspectj-autoproxy/>
<bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”
p:driverClassName=”${jdbc.driverClassName}”
p:url=”${jdbc.url}”
p:username=”${jdbc.username}”
p:password=”${jdbc.password}”
p:defaultAutoCommit=”false”/><bean id=”txManager” class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”
p:dataSource-ref=”dataSource”/><tx:annotation-driven transaction-manager=”txManager”/>
@Transactional
public class BlogServiceImpl
간단하죠?
스프링은 AOP 기술과 애노테이션을 이용하여 아주 쉽게 트랜잭션을 지원합니다. 물론 애노테이션을 지원하지 않는 JDK1.4에서도 다른 방법을 이용하여 위와 버금가는 방법으로 쉽게 트랜잭션을 관리할 수 있습니다.
‘봄’이 완연하다못해 더운 계절입니다. :-) 왜 아직도 스프링을 쓰지 않으시는지요? ^^
블로그 16Bytes에서 포스트(http://16bytes.com/Making_Java_web_development_easier.html)를 하나 읽었습니다.
현재의 웹 개발 프레임워크는 아래 다섯 가지가 부족하다고 말합니다.
Automatically create and wire MVC components.스프링을 쓰면서 들었던 생각을 그대로 옮긴 것 같습니다. :)
Define web application flows.
Generate automatic validation.
Wire data components with their graphical presentation.
Prevent excessive configuration and configuration errors
SimpleFormController를 이용해서 작업 처리 뒤 대개 특정 주소로 리다이렉트를 합니다. 대표적인 예를 들어보겠습니다.
edit.do?docId=56 이 주소에서 문서를 수정합니다. “확인” 버튼을 누르면 read.do?docId=56으로 가야하는데 views.properties에는 ? 뒷 부분을 지정할 수 없어 이런 저런 꼼수를 쓰곤 합니다.
아주 흔한 경우입니다. 당연히 스프링에는 이 문제를 깨끗하게 해결할 수 있는 방법이 있습니다
다음처럼 views.properties에 class를 정의합니다.
editSuccess.class=org.springframework.web.servlet.view.RedirectView
editSuccess.http10Compatible=false
editSuccess.contextRelative=true
editSuccess.url=/list.page
docId 매개변수를 read.do에 붙이고 싶다면 ModelAndView 객체의 model에 docId란 이름으로 값을 넣으면 됩니다.
mv.put(”docId”, 56);
스프링의 RedirectView 클래스 소스를 참조하시면 더 쉽게 이해하실 수 있습니다.
