Spring - Java/J2EE Application Framework

Reference Documentation

Rod Johnson

Juergen Hoeller

Alef Arendsen

Colin Sampaleanu

Darren Davison

Dmitriy Kopylenko

Thomas Risberg

Mark Pollack

Rob Harrop

Version 1.2.2

Copies of this document may be made for your own use and for distribution to others, provided that you do not charge any fee for such copies and further provided that each copy contains this Copyright Notice, whether distributed in print or electronically.

(Work in progress)


Table of Contents

서문
1. 소개
1.1. 개요
1.2. 사용 시나리오
2. 배경 지식
2.1. 제어의 역행 / 의존 주입(Inversion of Control / Dependency Injection)
3. Beans, BeanFactory 그리고 ApplicationContext
3.1. 소개
3.2. BeanFactory 와 BeanDefinitions - 기초
3.2.1. BeanFactory
3.2.2. BeanDefinition
3.2.3. bean 클래스
3.2.3.1. 생성자를 통한 Bean 생성
3.2.3.2. 정적 factory메소드를 통한 Bean 생성
3.2.3.3. 인스턴스 factory메소드를 통한 Bean 생성
3.2.4. bean 구분자 (id 와 name)
3.2.5. 싱글톤이나 비-싱글톤(non-singleton)
3.3. 프라퍼티, 협력자(collaborators), autowiring 과 의존성 체크
3.3.1. bean프라퍼티와 협력자(collaborators) 셋팅하기
3.3.2. 생성자의 인자 분석
3.3.2.1. 생성자의 인자 타입 대응(match)
3.3.2.2. 생성자의 인자 인덱스
3.3.3. bean프라퍼티와 상세화된 생성자의 인자
3.3.3.1. value와 ref 간략화한(shortcut) 폼
3.3.4. 메소드 삽입
3.3.4.1. 룩업(Lookup) 메소드 삽입
3.3.4.2. 임의의 메소드 교체
3.3.5. depends-on 사용하기
3.3.6. Autowiring 협력자
3.3.7. 의존성을 위한 체크
3.4. bean의 성질을 커스터마이징하기.
3.4.1. Lifecycle 인터페이스
3.4.1.1. InitializingBean / init-method
3.4.1.2. DisposableBean / destroy-method
3.4.2. 당신이 누구인지 알고 있다.(Knowing who you are)
3.4.2.1. BeanFactoryAware
3.4.2.2. BeanNameAware
3.4.3. FactoryBean
3.5. 추상 그리고 자식 bean정의
3.6. BeanFactory와 상호작동하기
3.6.1. BeanFactory의 생성물이 아닌 FactoryBean 얻기
3.7. BeanPostprocessors로 bean 커스터마이징하기
3.8. BeanFactoryPostprocessors를 가진 bean factory커스터마이징하기
3.8.1. PropertyPlaceholderConfigurer
3.8.2. PropertyOverrideConfigurer
3.9. 추가적인 사용자지정 PropertyEditors 등록하기
3.10. 존재하는 bean을 위한 별칭을 추가하기 위한 별칭 요소 사용하기.
3.11. ApplicationContext에 대한 소개
3.12. ApplicationContext에 추가된 기능
3.12.1. MessageSource 사용하기
3.12.2. events 전파하기
3.12.3. Spring내에서 자원(resources) 사용하기
3.13. ApplicationContext내에서 사용자정의 행위
3.13.1. ApplicationContextAware 표시자(marker) 인터페이스
3.13.2. BeanPostProcessor
3.13.3. BeanFactoryPostProcessor
3.13.4. PropertyPlaceholderConfigurer
3.14. 추가적인 사용자정의 PropertyEditors 등록하기
3.15. 프라퍼티 표현에서 bean프라퍼티 또는 생성자의 인자를 셋팅하기.
3.16. 필드값으로부터 bean프라퍼티 또는 생성자의 인자를 셋팅하기.
3.17. 다른 메소드를 호출하고 선택적으로 반환값을 사용한다.
3.18. 하나의 파일로부터 다른것으로 bean정의를 끌어오기
3.19. 웹 애플리케이션으로부터 ApplicationContext생성하기.
3.20. Glue 코드와 좋지않은 싱글톤
3.20.1. SingletonBeanFactoryLocator 와 ContextSingletonBeanFactoryLocator을 사용하기
4. PropertyEditors, data binding, validation and the BeanWrapper
4.1. 소개
4.2. Binding data를 사용한DataBinder
4.3. Bean 조작(manipulation)과 BeanWrapper
4.3.1. Setting 과 getting 기본과 내포된 설정들
4.3.2. 내장 PropertyEditors, 변환 타입들(Built-in PropertyEditors, converting types)
4.3.3. 언급할 가치가 있는 다른 기능들.
5. Spring AOP: Spring을 이용한 Aspect 지향적인 프로그래밍
5.1. 개념
5.1.1. AOP 개념
5.1.2. Spring AOP의 기능과 대상
5.1.3. Spring 내 AOP 프록시
5.2. Spring내 Pointcuts
5.2.1. 개념
5.2.2. pointcuts에서의 작업(operation)
5.2.3. 편리한 pointcut 구현물
5.2.3.1. 정적 pointcuts
5.2.3.2. 동적 pointcuts
5.2.4. Pointcut 수퍼클래스(superclasses)
5.2.5. 사용자지정 pointcuts
5.3. Spring 내 Advice타입들
5.3.1. Advice 생명주기
5.3.2. Spring내 Advice 타입들
5.3.2.1. Interception around advice
5.3.2.2. 전(Before) advice
5.3.2.3. Throws advice
5.3.2.4. advice를 반환한 후(after returning advice)
5.3.2.5. Introduction advice
5.4. Spring내 Advisors
5.5. AOP프록시를 생성하기 위한 ProxyFactoryBean사용하기
5.5.1. 기본
5.5.2. 자바빈 프라퍼티
5.5.3. 프록시 인터페이스
5.5.4. 프록시 클래스
5.5.5. 'global' advisor 사용하기
5.6. 편리한 프록시 생성
5.6.1. TransactionProxyFactoryBean
5.6.2. EJB 프록시
5.7. 간결한 프록시 정의
5.8. ProxyFactory로 프로그램적으로 AOP프록시를 생성하기.
5.9. advised 객체 조작하기.
5.10. "autoproxy" 기능 사용하기
5.10.1. autoproxy bean정의
5.10.1.1. BeanNameAutoProxyCreator
5.10.1.2. DefaultAdvisorAutoProxyCreator
5.10.1.3. AbstractAdvisorAutoProxyCreator
5.10.2. 메터데이타-지향 자동 프록시 사용하기.
5.11. TargetSources 사용하기
5.11.1. 핫 스왑가능한 대상 소스
5.11.2. 풀링 대상 소스
5.11.3. 프로토 타입 대상 소스
5.11.4. ThreadLocal 대상 소스
5.12. 새로운 Advice 타입을 정의하기
5.13. 추가적으로 읽을거리와 자원들
5.14. 로드맵
6. AspectJ 통합
6.1. 개요
6.2. Spring IoC를 사용하여 AspectJ 설정하기.
6.2.1. "싱글톤" aspects
6.2.1.1. 예제
6.2.1.2. 정렬 이슈
6.2.2. 싱글톤 형식이 아닌 aspect
6.2.3. Gotchas
6.3. 목표 Spring advice를 위한 AspectJ 포인트컷(pointcut) 사용하기
6.4. AspectJ를 위한 Spring aspect
7. 트랜잭션 관리
7.1. Spring 트랜잭션 추상화
7.2. 트랜잭션 전략
7.3. 프로그래밍적인 트랜잭션 관리
7.3.1. TransactionTemplate 사용하기
7.3.2. PlatformTransactionManager 사용하기
7.4. 선언적 트랜잭션 관리
7.4.1. BeanNameAutoProxyCreator, 또 다른 선언적 접근방법
7.5. 프로그래밍적/선언적 트랜잭션 관리 중 선택하기
7.6. 트랜잭션 관리를 위한 어플리케이션 서버가 필요한가?
7.7. 공통적인 문제
8. 소스 레벨 메타데이타 지원
8.1. 소스-레벨 메타데이타
8.2. Spring의 메타데이타 지원
8.3. Jakarta Commons Attributes과 통합
8.4. 메타데이타와 Spring AOP 자동 프록시
8.4.1. 기초
8.4.2. 선언적인 트랜잭션 관리
8.4.3. 풀링(Pooling)
8.4.4. 사용자정의 메타데이타
8.5. MVC 웹티어 설정을 최소화하기 위한 속성 사용하기
8.6. 메타데이타 속성의 다른 사용
8.7. 추가적인 메타데이타 API를 위한 지원 추가하기
9. DAO support
9.1. 소개
9.2. 일관된 예외 구조
9.3. DAO지원을 위한 일관된 추상클래스
10. JDBC를 사용한 데이터 접근
10.1. 소개
10.2. 기본적인 JDBC처리와 에러 처리를 위한 JDBC Core클래스 사용하기
10.2.1. JdbcTemplate
10.2.2. DataSource
10.2.3. SQLExceptionTranslator
10.2.4. Statements 실행하기
10.2.5. 쿼리문 실행하기
10.2.6. 데이터베이스 수정하기
10.3. 데이터베이스에 연결하는 방법을 제어하기
10.3.1. DataSourceUtils
10.3.2. SmartDataSource
10.3.3. AbstractDataSource
10.3.4. SingleConnectionDataSource
10.3.5. DriverManagerDataSource
10.3.6. DataSourceTransactionManager
10.4. 자바 객체처럼 JDBC작업을 모델링 하기.
10.4.1. SqlQuery
10.4.2. MappingSqlQuery
10.4.3. SqlUpdate
10.4.4. StoredProcedure
10.4.5. SqlFunction
11. 객체-관계 연결자(O/R Mappers)를 이용한 데이터 접근
11.1. 소개
11.2. Hibernate
11.2.1. 자원 관리
11.2.2. 애플리케이션 컨텍스트내에서 자원 정의
11.2.3. Inversion of Control: Template and Callback
11.2.4. 탬플릿 대신에 AOP인터셉터 적용하기.
11.2.5. 프로그램의 트랜잭션 구분(Demarcation)
11.2.6. 선언적인 트랜잭션 구분
11.2.7. 트랜잭션 관리 전략
11.2.8. 컨테이너 자원 대 로컬 자원
11.2.9. 샘플들
11.3. JDO
11.4. iBATIS
11.4.1. 1.3.x and 2.0 사이의 개요와 차이점
11.4.2. iBATIS 1.3.x
11.4.2.1. SqlMap을 셋업하기
11.4.2.2. SqlMapDaoSupport 사용하기
11.4.2.3. 트랜잭션 관리
11.4.3. iBATIS 2
11.4.3.1. SqlMap 셋업하기
11.4.3.2. SqlMapClientDaoSupport 사용하기
12. 웹 MVC framework
12.1. 웹 MVC framework 소개
12.1.1. 다른 MVC구현물의 플러그인 가능성
12.1.2. Spring MVC의 특징
12.2. DispatcherServlet
12.3. 컨트롤러
12.3.1. AbstractController 와 WebContentGenerator
12.3.2. 간단한 다른 컨트롤러
12.3.3. MultiActionController
12.3.4. CommandControllers
12.4. Handler mappings
12.4.1. BeanNameUrlHandlerMapping
12.4.2. SimpleUrlHandlerMapping
12.4.3. HandlerInterceptors 추가하기
12.5. view와 view결정하기
12.5.1. ViewResolvers
12.5.2. ViewResolvers 묶기(Chaining)
12.6. 로케일 사용하기.
12.6.1. AcceptHeaderLocaleResolver
12.6.2. CookieLocaleResolver
12.6.3. SessionLocaleResolver
12.6.4. LocaleChangeInterceptor
12.7. 테마(themes) 사용하기
12.8. Spring의 multipart (파일업로드) 지원
12.8.1. 소개
12.8.2. MultipartResolver 사용하기
12.8.3. 폼에서 파일업로드를 다루기.
12.9. 예외 다루기
13. 통합 뷰 기술들
13.1. 소개
13.2. JSP & JSTL
13.2.1. 뷰 해결자(View resolvers)
13.2.2. 'Plain-old' JSPs 대(versus) JSTL
13.2.3. 추가적인 태그들을 쉽게 쓸수 있는 개발
13.3. Tiles
13.3.1. 의존물들(Dependencies)
13.3.2. Tiles를 통합하는 방법
13.3.2.1. InternalResourceViewResolver
13.3.2.2. ResourceBundleViewResolver
13.4. Velocity & FreeMarker
13.4.1. 의존물들(Dependencies)
13.4.2. 컨텍스트 구성(Context configuration)
13.4.3. 생성 템플릿들(Creating templates)
13.4.4. 진보한 구성(Advanced configuration)
13.4.4.1. velocity.properties
13.4.4.2. FreeMarker
13.4.5. 바인드(Bind) 지원과 폼(form) 핸들링
13.4.5.1. 바인드(bind) 매크로
13.4.5.2. 간단한 바인딩
13.4.5.3. 폼 input 생성 매크로
13.4.5.4. HTML회피를 오버라이드하고 XHTML호환 태그를 만든다.
13.5. XSLT
13.5.1. 나의 첫번째 단어
13.5.1.1. Bean 정의
13.5.1.2. 표준적인 MVC 컨트롤러 코드
13.5.1.3. 모델 데이터를 XML로 변환하기
13.5.1.4. view프라퍼티 정의하기
13.5.1.5. 문서 변형
13.5.2. 요약
13.6. 문서 views (PDF/Excel)
13.6.1. 소개
13.6.2. 설정 그리고 셋업
13.6.2.1. 문서 view정의
13.6.2.2. 컨트롤러 코드
13.6.2.3. Excel view를 위한 하위클래스 만들기
13.6.2.4. PDF view를 위한 하위클래스 만들기
13.7. JasperReports
13.7.1. 의존성
13.7.2. 설정
13.7.2.1. ViewResolver 설정하기
13.7.2.2. View 설정하기
13.7.2.3. 리포트 파일에 대해
13.7.2.4. JasperReportsMultiFormatView 사용하기
13.7.3. ModelAndView 활성화하기
13.7.4. 하위-리포트로 작동하기
13.7.4.1. 하위-리포트 파일 설정하기
13.7.4.2. 하위-리포트 데이터소스 설정하기
13.7.5. 전파자(Exporter) 파라미터 설정하기
14. 다른 웹 프레임워크들과의 통합
14.1. 소개
14.2. JavaServer Faces
14.2.1. DelegatingVariableResolver
14.2.2. FacesContextUtils
14.3. Struts
14.3.1. ContextLoaderPlugin
14.3.1.1. DelegatingRequestProcessor
14.3.1.2. DelegatingActionProxy
14.3.2. ActionSupport 클래스들
14.4. Tapestry
14.4.1. 아키텍쳐
14.4.2. 구현체
14.4.2.1. 샘플 어플리케이션 컨텍스트
14.4.2.2. Tapestry pages에서 빈들을 얻어오기
14.4.2.3. 어플리케이션 컨텍스트를 Tapestry에 드러내기
14.4.2.4. Component 정의 파일들
14.4.2.5. abstract accessors 추가하기
14.4.3. 개요
14.5. WebWork
15. JMS
15.1. 소개
15.2. 도메인 단일화(unification)
15.3. JmsTemplate
15.3.1. ConnectionFactory
15.3.2. 트랜잭션 관리
15.3.3. 목적지(destination) 관리
15.4. JmsTemplate 사용하기
15.4.1. 메시지 보내기
15.4.2. 동기적으로 받기(Receiving)
15.4.3. 메시지 변환기(converter) 사용하기
15.4.4. SessionCallback 과 ProducerCallback
16. EJB에 접근하고 구현하기
16.1. EJB에 접근하기
16.1.1. 개념
16.1.2. local SLSBs에 접근하기
16.1.3. remote SLSB에 접근하기
16.2. Spring의 편리한 EJB구현물 클래스를 사용하기.
17. Spring을 사용한 원격(Remoting)및 웹서비스
17.1. 소개
17.2. RMI를 사용한 서비스 드러내기
17.2.1. RmiServiceExporter를 사용하여 서비스 내보내기
17.2.2. 클라이언트에서 서비스 링크하기
17.3. HTTP를 통해 서비스를 원격으로 호출하기 위한 Hessian 이나 Burlap을 사용하기.
17.3.1. Hessian을 위해 DispatcherServlet을 묶기.
17.3.2. HessianServiceExporter를 사용하여 bean을 드러내기
17.3.3. 클라이언트의 서비스로 링크하기
17.3.4. Burlap 사용하기
17.3.5. Hessian 이나 Burlap을 통해 드러나는 서비스를 위한 HTTP 기본 인증 적용하기
17.4. HTTP호출자를 사용하여 서비스를 드러내기
17.4.1. 서비스 객체를 드러내기
17.4.2. 클라이언트에서 서비스 링크하기
17.5. 웹 서비스
17.5.1. JAX-RPC를 사용하여 서비스를 드러내기
17.5.2. 웹 서비스에 접근하기
17.5.3. Register Bean 맵핑
17.5.4. 자체적인 핸들러 등록하기
17.5.5. XFire를 사용하여 웹 서비스를 드러내기
17.6. 자동-탐지(Auto-detection)는 원격 인터페이스를 위해 구현되지 않는다.
17.7. 기술을 선택할때 고려사항.
18. Spring 메일 추상 계층을 사용한 이메일 보내기
18.1. 소개
18.2. Spring 메일 추상화 구조
18.3. Spring 메일 추상화 사용하기
18.3.1. 플러그인할 수 있는 MailSender 구현클래스들
18.4. JavaMail MimeMessageHelper 사용하기
18.4.1. 간단한 MimeMessage 를 생성하고 보내기
18.4.2. 첨부파일들과 inline 리소스들을 보내기
19. Quartz 혹은 Timer 를 사용한 스케쥴링
19.1. 소개
19.2. OpenSymphony Quartz 스케쥴러 사용하기
19.2.1. JobDetailBean 사용하기
19.2.2. MethodInvokingJobDetailFactoryBean 사용하기
19.2.3. triggers 와 SchedulerFactoryBean을 사용하여 jobs를 묶기
19.3. JDK Timer support 사용하기
19.3.1. 임의의 timers 생성하기
19.3.2. MethodInvokingTimerTaskFactoryBean 사용하기
19.3.3. 감싸기 : TimerFactoryBean을 사용하여 tasks를 세팅하기
20. JMX 지원
20.1. 소개
20.2. 당신의 bean을 JMX로 내보내기(Exporting)
20.2.1. MBeanServer 생성하기
20.2.2. 늦게 초기화되는(Lazy-Initialized) MBeans
20.2.3. MBean의 자동 등록
20.3. 당신 bean의 관리 인터페이스를 제어하기
20.3.1. MBeanInfoAssembler 인터페이스
20.3.2. 소스레벨 메타데이타(metadata) 사용하기
20.3.3. JDK 5.0 Annotations 사용하기
20.3.4. 소스레벨 메타데이타 타입들
20.3.5. AutodetectCapableMBeanInfoAssembler 인터페이스
20.3.6. 자바 인터페이스를 사용하여 관리 인터페이스 정의하기
20.3.7. MethodNameBasedMBeanInfoAssembler 사용하기
20.4. 당신의 bean을 위한 ObjectName 제어하기
20.4.1. Properties로 부터 ObjectName 읽기
20.4.2. MetadataNamingStrategy 사용하기
20.5. JSR-160 연결자(Connectors)로 당신의 bean을 내보내기
20.5.1. 서버측 연결자(Connectors)
20.5.2. 클라이언트측 연결자
20.5.3. Burlap/Hessian/SOAP 곳곳의 JMX
20.6. 프록시를 통해서 MBean에 접속하기
21. Testing
21.1. 단위 테스팅
21.2. 통합 테스팅
21.2.1. 컨텍스트 관리와 캐슁
21.2.2. 테스트 클래스 인스턴스들의 의존성 주입
21.2.3. 트랜잭션 관리
21.2.4. 편리한 변수들
21.2.5. 예시
21.2.6. 통합 테스트 실행하기
A. spring-beans.dtd