1장 IoC 컨테이너와 DI
___1.1 IoC 컨테이너: 빈 팩토리와 애플리케이션 컨텍스트
______1.1.1 IoC 컨테이너를 이용해 애플리케이션 만들기
_________POJO 클래스
_________설정 메타정보
______1.1.2 IoC 컨테이너의 종류와 사용 방법
_________StaticApplicationContext
_________GenericApplicationContext
_________GenericXmlApplicationContext
_________WebApplicationContext
______1.1.3 IoC 컨테이너 계층구조
_________부모 컨텍스트를 이용한 계층구조 효과
_________컨텍스트 계층구조 테스트
______1.1.4 웹 애플리케이션의 IoC 컨테이너 구성
_________웹 애플리케이션의 컨텍스트 계층구조
_________웹 애플리케이션의 컨텍스트 구성 방법
_________루트 애플리케이션 컨텍스트 등록
_________서블릿 애플리케이션 컨텍스트 등록
___1.2 IoC/DI를 위한 빈 설정 메타정보 작성
______1.2.1 빈 설정 메타정보
_________빈 설정 메타정보 항목
______1.2.2 빈 등록 방법
_________XML: 태그
_________XML: 네임스페이스와 전용 태그
_________자동인식을 이용한 빈 등록: 스테레오타입 애노테이션과 빈 스캐너
_________자바 코드에 의한 빈 등록: @Configuration 클래스의 @Bean 메소드
_________자바 코드에 의한 빈 등록: 일반 빈 클래스의 @Bean 메소드
_________빈 등록 메타정보 구성 전략
______1.2.3 빈 의존관계 설정 방법
_________XML: ,
_________XML: 자동와이어링
_________XML: 네임스페이스와 전용 태그
_________애노테이션: @Resource
_________애노테이션: @Autowired/@Inject
_________@Autowired와 getBean(), 스프링 테스트
_________자바 코드에 의한 의존관계 설정
_________빈 의존관계 설정 전략
______1.2.4 프로퍼티 값 설정 방법
_________메타정보 종류에 따른 값 설정 방법
_________PropertyEditor와 ConversionService
_________컬렉션
_________Null과 빈 문자열
_________프로퍼티 파일을 이용한 값 설정
______1.2.5 컨테이너가 자동등록하는 빈
_________ApplicationContext, BeanFactory
_________ResourceLoader, ApplicationEventPublisher
_________systemProperties, systemEnvironment
___1.3 프로토타입과 스코프
______1.3.1 프로토타입 스코프
_________프로토타입 빈의 생명주기와 종속성
_________프로토타입 빈의 용도
_________DI와 DL
_________프로토타입 빈의 DL 전략
______1.3.2 스코프
_________스코프의 종류
_________스코프 빈의 사용 방법
_________커스텀 스코프와 상태를 저장하는 빈 사용하기
___1.4 기타 빈 설정 메타정보
______1.4.1 빈 이름
_________XML 설정에서의 빈 식별자와 별칭
_________애노테이션에서의 빈 이름
______1.4.2 빈 생명주기 메소드
_________초기화 메소드
_________제거 메소드
______1.4.3 팩토리 빈과 팩토리 메소드
___1.5 스프링 3.1의 Ioc 컨테이너와 DI
______1.5.1 빈의 역할과 구분
_________빈의 종류
_________컨테이너 인프라 빈과 전용 태그
_________빈의 역할
______1.5.2 컨테이너 인프라 빈을 위한 자바 코드 메타정보
_________IoC/DI 설정 방법의 발전
_________자바 코드를 이용한 컨테이너 인프라 빈 등록
______1.5.3 웹 애플리케이션의 새로운 IoC 컨테이너 구성
______1.5.4 런타임 환경 추상화와 프로파일
_________환경에 따른 빈 설정정보 변경 전략과 한계
_________런타임 환경과 프로파일
_________활성 프로파일 지정 방법
_________프로파일 활용 전략
______1.5.5 프로퍼티 소스
_________프로퍼티
_________스프링에서 사용되는 프로퍼티의 종류
_________프로파일의 통합과 추상화
_________프로퍼티 소스의 사용
_________@PropertySource와 프로퍼티 파일
_________웹 환경에서 사용되는 프로퍼티 소스와 프로퍼티 소스 초기화 오브젝트
___1.6 정리
2장 데이터 액세스 기술
___2.1 공통 개념
______2.1.1 DAO 패턴
_________DAO 인터페이스와 DI
_________예외처리
______2.1.2 템플릿과 API
______2.1.3 DataSource
_________학습 테스트와 통합 테스트를 위한 DataSource
_________오픈소스 또는 상용 DB 커넥션 풀
_________JDNI/WAS DB 풀
___2.2 JDBC
______2.2.1 스프링 JDBC 기술과 동작원리
_________스프링의 JDBC 접근 방법
_________스프링 JDBC가 해주는 작업
______2.2.2 SimpleJdbcTemplate
_________SimpleJdbcTemplate 생성
_________SQL 파라미터
_________SQL 실행 메소드
_________SQL 조회 메소드
_________SQL 배치 메소드
______2.2.3 SimpleJdbcInsert
_________SimpleJdbcInsert 생성
_________SimpleJdbcInsert 실행
______2.2.4 SimpleJdbcCall
_________SimpleJdbcCall 생성
_________SimpleJdbcCall 실행
______2.2.5 스프링 JDBC DAO
___2.3 iBatis SqlMaps
______2.3.1 SqlMapClient 생성
_________iBatis 설정파일과 매핑파일
_________SqlMapClient를 위한 SqlMapClientFactoryBean 등록
______2.3.2 SqlMapClientTemplate
_________등록, 수정, 삭제
_________조회
_________SqlMapClientCallback
___2.4 JPA
______2.4.1 EntityManagerFactory 등록
_________LocalEntityManagerFactoryBean
_________JavaEE 5 서버가 제공하는 EntityManagerFactory
_________LocalContainerEntityManagerFactoryBean
_________트랜잭션 매니저
______2.4.2 EntityManager와 JpaTemplate
_________JpaTemplate
_________애플리케이션 관리 EntityManager와 @PersistenceUnit
_________컨테이너 관리 EntityManager와 @PersistenceContext
_________@PersistenceContext와 확장된 퍼시스턴스 컨텍스트
_________JPA 예외 변환
_________JPA 예외 변환 AOP
___2.5 하이버네이트
______2.5.1 SessionFactory 등록
_________LocalSessionFactoryBean
_________AnnotationSessionFactoryBean
_________트랜잭션 매니저
______2.5.2 Session과 HibernateTemplate
_________HibernateTemplate
_________SessionFactory.getCurrentSession()
___2.6 트랜잭션
______2.6.1 트랜잭션 추상화와 동기화
_________PlatformTransactionManager
_________트랜잭션 매니저의 종류
______2.6.2 트랜잭션 경계설정 전략
_________코드에 의한 트랜잭션 경계설정
_________선언적 트랜잭션 경계설정
_________프록시 모드: 인터페이스와 클래스
_________AOP 방식: 프록시와 AspectJ
______2.6.3 트랜잭션 속성
_________트랜잭션 전파: propagation
_________트랜잭션 격리수준: isolation
_________트랜잭션 제한시간: timeout
_________읽기전용 트랜잭션: read-only, readOnly
_________트랜잭션 롤백 예외: rollback-for, rollbackFor, rollbackForClassName
_________트랜잭션 커밋 예외: no-rollback-for, noRollbackFor, noRollbackForClassName
______2.6.4 데이터 액세스 기술 트랜잭션의 통합
_________트랜잭션 매니저별 조합 가능 기술
_________ORM과 비 ORM DAO를 함께 사용할 때의 주의사항
______2.6.5 JTA를 이용한 글로벌/분산 트랜잭션
_________독립형 JTA 트랜잭션 매니저
_________WAS 트랜잭션 매니저의 고급 기능 사용하기
___2.7 스프링 3.1의 데이터 액세스 기술
______2.7.1 persistence.xml 없이 JPA 사용하기
______2.7.2 하이버네이트 4 지원
_________LocalSessionFactoryBean
_________LocalSessionFactoryBuilder
______2.7.3 @EnableTransactionManager 295
___2.8 정리
3장 스프링 웹 기술과 스프링 MVC
___3.1 스프링의 웹 프레젠테이션 계층 기술
______3.1.1 스프링에서 사용되는 웹 프레임워크의 종류
_________스프링 웹 프레임워크
_________스프링 포트폴리오 웹 프레임워크
_________스프링을 기반으로 두지 않는 웹 프레임워크
______3.1.2 스프링 MVC와 DispatcherServlet 전략
_________DispatcherServlet과 MVC 아키텍처
_________DispatcherServlet의 DI 가능한 전략
___3.2 스프링 웹 애플리케이션 환경 구성
______3.2.1 간단한 스프링 웹 프로젝트 생성
_________루트 웹 애플리케이션 컨텍스트
_________서블릿 웹 애플리케이션 컨텍스트 등록
_________스프링 웹 프로젝트 검증
______3.2.2 스프링 웹 학습 테스트
_________서블릿 테스트용 목 오브젝트
_________테스트를 위한 DispatcherServlet 확장
_________ConfigurableDispatcherServlet을 이용한 스프링 MVC 테스트
_________편리한 DispatcherServlet 테스트를 위한 AbstractDispatcherServletTest
___3.3 컨트롤러
______3.3.1 컨트롤러의 종류와 핸들러 어댑터
_________Servlet과 SimpleServletHandlerAdapter
_________HttpRequestHandler와 HttpRequestHandlerAdapter
_________Controller와 SimpleControllerHandlerAdapter
_________AnnotationMethodHandlerAdapter
______3.3.2 핸들러 매핑
_________BeanNameUrlHandlerMapping
_________ControllerBeanNameHandlerMapping
_________ControllerClassNameHandlerMapping
_________SimpleUrlHandlerMapping
_________DefaultAnnotationHandlerMapping
_________기타 공통 설정정보
______3.3.3 핸들러 인터셉터
_________HandlerInterceptor
_________핸들러 인터셉터 적용
______3.3.4 컨트롤러 확장
_________커스텀 컨트롤러 인터페이스와 핸들러 어댑터 개발
___3.4 뷰
______3.4.1 뷰
_________InternalResourceView와 JstlView
_________RedirectView
_________VelocityView, FreeMarkerView
_________MarshallingView
_________AbstractExcelView, AbstractJExcelView, AbstractPdfView
_________AbstractAtomFeedView, AbstractRssFeedView
_________XsltView, TilesView, AbstractJasperReportsView
_________MappingJacksonJsonView
______3.4.2 뷰 리졸버
_________InternalResourceViewResolver
_________VelocityViewResolver, FreeMarkerViewResolver
_________ResourceBundleViewResolver, XmlViewResolver, BeanNameViewResolver
_________ContentNegotiatingViewResolver
___3.5 기타 전략
______3.5.1 핸들러 예외 리졸버
_________AnnotationMethodHandlerExceptionResolver
_________ResponseStatusExceptionResolver
_________DefaultHandlerExceptionResolver
_________SimpleMappingExceptionResolver
______3.5.2 지역정보 리졸버
______3.5.3 멀티파트 리졸버
_________RequestToViewNameTranslator
___3.6 스프링 3.1의 MVC
______3.6.1 플래시 맵 매니저 전략
_________플래시 맵
_________플래시 맵 매니저
_________플래시 맵 매니저 전략
______3.6.2 WebApplicationInitializer를 이용한 컨텍스트 등록
_________루트 웹 컨텍스트 등록
_________서블릿 컨텍스트 등록
___3.7 정리
4장 스프링 @MVC
___4.1 @RequestMapping 핸들러 매핑
______4.1.1 클래스/메소드 결합 매핑정보
_________@RequestMapping 애노테이션
_________타입 레벨 매핑과 메소드 레벨 매핑의 결합
_________메소드 레벨 단독 매핑
_________타입 레벨 단독 매핑
______4.1.2 타입 상속과 매핑
_________매핑정보 상속의 종류
_________제네릭스와 매핑정보 상속을 이용한 컨트롤러 작성
___4.2 @Controller
______4.2.1 메소드 파라미터의 종류
_________HttpServletRequest, HttpServletResponse
_________HttpSession
_________WebRequest, NativeWebRequest
_________Locale
_________InputStream, Reader
_________OutputStream, Writer
_________@PathVariable
_________@RequestParam
_________@CookieValue
_________@RequestHeader
_________Map, Model, ModelMap
_________@ModelAttribute
_________Errors, BindingResult
_________SessionStatus
_________@RequestBody
_________@Value
_________@Valid
______4.2.2 리턴 타입의 종류
_________자동 추가 모델 오브젝트와 자동생성 뷰 이름
_________ModelAndView
_________String
_________void
_________모델 오브젝트
_________Map/Model/ModelMap
_________View
_________@ResponseBody
______4.2.3 @SessionAttributes와 SessionStatus
_________도메인 중심 프로그래밍 모델과 상태 유지를 위한 세션 도입의 필요성
_________@SessionAttributes
_________SessionStatus
_________등록 폼을 위한 @SessionAttributes 사용
_________스프링 목 오브젝트와 AbstractDispatcherServletTest를 이용해 세션 테스트 만들기
___4.3 모델 바인딩과 검증
______4.3.1 PropertyEditor
_________디폴트 프로퍼티 에디터
_________커스텀 프로퍼티 에디터
_________@InitBinder
_________WebBindingInitializer
_________프로토타입 빈 프로퍼티 에디터
______4.3.2 Converter와 Formatter
_________Converter
_________ConversionService
_________Formatter와 FormattingConversionService
_________바인딩 기술의 적용 우선순위와 활용 전략
______4.3.3 WebDataBinder 설정 항목
_________allowedFields, disallowedFields
_________requiredFields
_________fieldMarkerPrefix
_________fieldDefaultPrefix
______4.3.4 Validator와 BindingResult, Errors
_________Validator
_________JSR-303 빈 검증 기능
_________BindingResult와 MessageCodeResolver
_________MessageSource
______4.3.5 모델의 일생
_________HTTP 요청으로부터 컨트롤러 메소드까지
_________컨트롤러 메소드로부터 뷰까지
___4.4 JSP 뷰와 form 태그
______4.4.1 EL과 spring 태그 라이브러리를 이용한 모델 출력
_________JSP EL
_________스프링 SpEL
_________지역화 메시지 출력
______4.4.2 spring 태그 라이브러리를 이용한 폼 작성
_________단일 폼 모델
_________와 BindingStatus
______4.4.3 form 태그 라이브러리
_________
_________
_________
_________
_________
_________,
_________,
_________,
_________, ,
_________커스텀 UI 태그 만들기
___4.5 메시지 컨버터와 AJAX
______4.5.1 메시지 컨버터의 종류
_________JSON을 이용한 AJAX 컨트롤러: GET + JSON
_________JSON을 이용한 AJAX 컨트롤러: POST(JSON) + JSON
___4.6 mvc 네임스페이스
_________
_________
_________
___4.7 @MVC 확장 포인트
______4.7.1 AnnotationMethodHandlerAdapter
_________SessionAttributeStore
_________WebArgumentResolver
_________ModelAndViewResolver
___4.8 URL과 리소스 관리
______4.8.1 를 이용한 URL 관리
_________디폴트 서블릿과 URL 매핑 문제
_________
______4.8.2 를 이용한 리소스 관리
___4.9 스프링 3.1의 @MVC
______4.9.1 새로운 RequestMapping 전략
_________@RequestMapping 메소드와 핸들러 매핑 전략의 불일치
_________HandlerMethod
_________@RequestMapping 전략 선택
______4.9.2 @RequestMapping 핸들러 매핑: RequestMappingHandlerMapping
_________요청 조건
_________요청 조건의 결합 방식
______4.9.3 @RequestMapping 핸들러 어댑터
_________파라미터 타입
_________확장 포인트
______4.9.4 @EnableWebMvc와 WebMvcConfigurationSupport를 이용한 @MVC 설정
_________@EnableWebMvc와 WebMvcConfigurer
_________@MVC 설정자 빈 등록 방법
_________@MVC 전략용 설정 빈 등록
___4.10 정리
5장 AOP와 LTW
___5.1 애스펙트 AOP
______5.1.1 프록시 기반 AOP
_________프록시 기반 AOP 개발 스타일의 종류와 특징
_________자동 프록시 생성기와 프록시 빈
_________프록시의 종류
______5.1.2 @AspectJ AOP
_________@AspectJ를 이용하기 위한 준비사항
_________@Aspect 클래스와 구성요소
_________포인트컷 메소드와 애노테이션
_________어드바이스 메소드와 애노테이션
_________파라미터 선언과 바인딩
_________@AspectJ를 이용한 AOP의 학습 방법과 적용 전략
___5.2 AspectJ와 @Configurable
______5.2.1 AspectJ AOP
______5.2.2 빈이 아닌 오브젝트에 DI 적용하기
_________DI 애스펙트
_________@Configurable
_________로드타임 위버와 자바 에이전트
___5.3 로드타임 위버(LT)
___5.4 스프링 3.1의 AOP와 LTW
______5.4.1 AOP와 LTW를 위한 애노테이션
_________@EnableAspectJAutoProxy
_________@EnableLoadTimeWeaving
___5.5 정리
6장 테스트 컨텍스트 프레임워크
___6.1 테스트 컨텍스트 프레임워크
______6.1.1 테스트 프레임워크와 컨텍스트 테스트
_________테스트용 애플리케이션 컨텍스트 캐싱과 설정파일
_________컨텍스트 설정의 상속과 컨텍스트 로더
______6.1.2 테스트 코드의 테스트 컨텍스트 활용
_________테스트 컨텍스트로부터 DI 받기
_________공유 컨텍스트 사용 시 주의할 점
___6.2 트랜잭션 지원 테스트
______6.2.1 테스트의 트랜잭션 지원 필요성
_________DAO 단독 테스트
_________롤백 테스트
______6.2.2 트랜잭션 지원 테스트 작성 방법
_________트랜잭션 매니저
_________@Transactional 테스트
_________ORM 롤백 트랜잭션 테스트의 주의사항
_________트랜잭션 지원 테스트에 DBUnit 이용하기
___6.3 스프링 3.1의 컨텍스트 테스트 프레임워크
______6.3.1 자바 코드 설정정보와 프로파일 활용
_________@Configuration 클래스 테스트
_________@ActiveProfile
___6.4 정리
7장 스프링의 기타 기술과 효과적인 학습 방법
___7.1 스프링 기술과 API를 효과적으로 학습하는 방법
______7.1.1 빈으로 등록되는 스프링 클래스와 DI
_________구현 인터페이스 분석
_________프로퍼티 분석
_________DI/확장 포인트 분석
___7.2 IoC 컨테이너 DI
______7.2.1 BeanPostProcessor와 BeanFactoryPostProcessor
_________BeanPostProcessor
_________BeanFactoryPostProcessor
___7.3 SpEL
______7.3.1 SpEL 사용 방법
___7.4 OXM
______7.4.1 Marshaller/Unmarshaller 인터페이스
______7.4.2 OXM 기술 어댑터 클래스
___7.5 리모팅과 웹 서비스, EJB
______7.5.1 익스포터와 프록시
_________익스포터
_________프록시
______7.5.2 RESTful 서비스 템플릿
______7.5.3 EJB 서비스 이용
___7.6 태스크 실행과 스케줄링
______7.6.1 TaskExecutor 서비스 추상화
______7.6.2 TaskScheduler
______7.6.3 task 네임스페이스
_________
_________
_________와
______7.6.4 애노테이션을 이용한 스케줄링과 비동기 태스크 실행
_________@Scheduled
_________@Async
___7.7 캐시 추상화(스프링 3.1)
______7.7.1 애노테이션을 이용한 캐시 속성 부여
_________@Cacheable
_________@CacheEvict와 @CachePut
_________애노테이션을 이용한 캐시 기능 설정
______7.7.2 캐시 매니저
___7.8 @Enable 애노테이션을 이용한 빈 설정정보 모듈화
______7.8.1 @Import와 @Configuration 상속
_________@Import를 이용한 단순 재사용
_________@Configuration 클래스 상속과 오버라이딩을 이용한 확장 방법
______7.8.2 @Enable 전용 애노테이션과 ImportAware
_________@Enable 애노테이션 적용
_________ImportAware 인터페이스를 이용한 옵션 지정
______7.8.3 빈 설정자
______7.8.4 ImportSelector와 ImportBeanDefinitionRegistrar
___7.9 정리
부록 A 스프링 모듈
___A.1 스프링 모듈의 종류와 특징
______A.1.1 스프링 모듈 이름
______A.1.2 스프링 모듈 추가
_________수동 추가
_________Maven/Ivy 자동 추가
______A.1.3 스프링 모듈 목록
___A.2 스프링 모듈의 의존관계
______A.2.1 모듈별 의존관계
_________ASM 모듈
_________Core 모듈
_________Beans 모듈
_________AOP 모듈
_________Expression 모듈
_________Context 모듈
_________Context.Support 모듈
_________Transaction 모듈
_________JDBC 모듈
_________ORM 모듈
_________Web 모듈
_________Web.Servlet 모듈
_________Web.Portlet 모듈
_________Web.Struts 모듈
_________JMS 모듈
_________Aspects 모듈
_________Instrument 모듈
_________Instrument.Tomcat 모듈
_________Test 모듈
부록 B 스프링 의존 라이브러리
___B.1 의존 라이브러리의 종류와 특징
______B.1.1 의존 라이브러리 이름
______B.1.2 의존 라이브러리 추가
_________수동 추가
_________자동 추가
___B.2 모듈별 의존 라이브러리 의존관계
______B.2.1 필수 라이브러리
______B.2.2 모듈별 선택 라이브러리
_________ASM 모듈
_________Core 모듈
_________Beans 모듈
_________AOP 모듈
_________Expression 모듈
_________Context 모듈
_________Context.Support 모듈
_________Transaction 모듈
_________JDBC 모듈
_________ORM 모듈
_________Web 모듈
_________Web.Servlet 모듈
_________Web.Portlet 모듈
_________Web.Struts 모듈
_________JMS 모듈
_________Aspects 모듈
_________Instrument 모듈
_________Instrument.Tomcat 모듈
_________Test 모듈