from spring 1.x to spring 2toby.epril.com/upload/jco8-fromspring1.x_to_spring2.0.pdf ·...
Post on 22-May-2020
0 Views
Preview:
TRANSCRIPT
From Spring 1.xFrom Spring 1.x
To To Spring 2.0Spring 2.0
이일민 (Consultant, Epril)
안영회 (Consultant, Epril)
2
목차
q Spring의목표와전략
q Spring 2.0
q Core Container and DI
q AOP
q Portable Service Abstractions
q Web
q Spring Portfolio
3
Spring 2.0으로가는길
q Spring 2.0을잘알고싶다면 Spring의
목표와전략을잘이해하는것이그첫
걸음이다
q Spring의기능위주로접근하면 Spring을제대로알기힘들다
q그리고나서 Spring 2.0이 1.x에비해서그
목표와전략을어떻게더발전시켰는가를이해하도록한다
4
Spring Framework은
q경량급풀스택 JSE/JEE 애플리케이션프레임워크
q 경량급(Lightweight)
q비침략적(Non-invasive)
q규모가작고기술이가볍다는의미가아님
q Full Stack
q HelloWorld, JSE, JEE
q모든레이어(UI, Service, Domain, Data…)
q 애플리케이션프레임워크
q애플리케이션개발을쉽고견고하게
5
Spring의목표
q Spring을이해하는가장좋은방법은 Spring
이지향하는목표를이해하는것이다q Spring의목표
qPOJO를이용한애플리케이션개발q 엔터프라이즈서비스를
선언적(declarative), 비침략적(non-invasive)인방법으로 POJO에적용q자바코드에수정을주지않고트랜잭션을적용
q POJO를그대로WebService, RMI 서비스endpoint로사용
6
POJO/Simple Object
q POJO(Plain Old Java Object)
q Martin Folwer
q EJB Bean과차별적인개념으로시작
q 특정규약(contract)에의존적이지않다q EJB Home/Remote Interface
q 환경(environment)에의존적이지않다q특정환경에제한을받는 class를사용하지않는다
q특정 lookup방식을사용하지않는다
7
POJO 방식의장점 (1)
q코드가간결해진다q 높은유연성을가진다
q 재사용에유리하다
q 이해가쉽다
q코드가특정환경에의존적이지않는다q 개발자가 Infrastructure가아닌업무로직
(business logic)에집중할수있다
q 고립된상태에서테스트(isolation test)하기가쉽다
8
POJO 방식의장점 (2)
q개발자들이특정기술에대한관심보다 OO디자인원칙에집중할수있도록해준다
9
Declarative Service (1)
q POJO 개발이좋다는것은알지만엔터프라
이즈애플리케이션을만들기위한많은엔터프라이즈서비스를어떻게적용할것인가?
q 1) POJO의장점을포기하고적당히타협한다 (EJB…)
q 2) 선언적인서비스로 POJO를
decorate한다.(Spring!)
10
Declarative Service (2)
q POJO와선언적서비스를이용하면POJO코드를그대로유지한채로
q JTA 트랜잭션에서 JDBC 트랜잭션으로
q RMI endpoint에서 SOAP endpoint로
전환이가능하다
11
Spring의전략
FLEXIBLE
JBO O-TC NEIR DET
S PM EL
TES
L
AB
E
12
Spring의기술
q Enabling technologies
POJO
Portable Service Abstraction
13
Spring 2.0
q Spring 1.x와완벽한호환q Spring 1.x 코드를그대로확장
q POJO기반의개발이라는목표유지
q많은새로운기능의추가를통해서더강력(powerful)한방법으로더단순(simple)하게작업을수행할수있도록만들었다
14
Backwards Compatibility
q Spring 1.x에서 2.0으로업그레이드하는가장빠른방법은?q Spring2.0의 spring.jar로덮어쓰기
q완벽한기존버전과호환q 1.x 기반으로개발된애플리케이션을그대로사용할수있음
q Java 1.3, 1.4, 5, 6
q Spring 프레임워크의뛰어난유연성과확장성q 개발자자신만의 Spring 버전으로확장
15
Spring2.0 IoC/DI Container
qNamespace를이용한설정의단순화
q Bean Lifecycle(scope)의확장
q Singleton, prototype, request, session
q Custom scope
q JVM기반의 (스크립트) 언어 bean 지원
q Groovy
q JRuby
q BeanShell POJO
16
Namespace를이용한 XML 설정
q Spring 1.xq <bean id=“” class=“” >
<property name=“” ref=“” />……
</bean>
q Spring 2.0q <bean />
q <jee:* /> JNDI, JEE
q <util:* /> Common Task
q <lang:* /> 스크립트언어
q <aop:* /> AOP
q <tx:* /> 트랜잭션관리
17
Namespace를이용한 XML 설정
q XML Schema Validation
q 다양한툴의지원
q 코드완성기능
q도메인에특화된자유로운설정가능
q 개발자가만든 Custom namespace/tag
q Spring설정이 XML hell이라는것은거짓
q 3-rd party의 Spring component 개발이가능
qDTD(1.x)/Schema(2.0) 동시지원
18
Namespace를이용한 XML 설정
q JNDI lookup
<bean id="dataSource" class="org.springframework...JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/jpetsore" /></bean>
<jee:jndi-lookup id="dataSource"
jndi-name="jdbc/jpetstore"/>
IDE 코드자동완성지원
19
Namespace를이용한 XML 설정
q여러개의 bean을 tag하나로정의하기<bean class="org.springframework...DefaultAdvisorAutoProxyCreator"/><bean class="org.springframework...TransactionAttributeSourceAdvisor">
<property name="transactionInterceptor ref="transactionInterceptor"/></bean><bean id="transactionInterceptor“ class="org.springframework...TransactionInterceptor">
<property name="transactionManager“ref="transactionManager"/><property name="transactionAttributeSource">
<bean class="org.springframework...AnnotationsTransactionAttributeSource"></bean>
</property></bean>
1
2
3
4
<tx:annotation-driven />
20
Lifecycle(Scope) 지원
q Sprng 1.x
q Singleton, Prototype
q Spring 2.0
q Bean Object의저장방법에따라다양한Scope로확장
q Request
q Session
q Clustered Cache
q Custom Scope
21
JVM 언어 bean 지원
q다양한언어로 bean 개발가능
q Spring 2.0은 JVM레벨의컨테이너
q스크립트언어의활용
q JRuby, Groovy, Beanshell
q 새로운언어지원추가
q Refreshable Bean 기능
22
Spring 2.0 AOP
q <aop:* /> 태그지원
q AspectJ와긴밀한연동
q Adrian Coyler: Spring CTO, AspectJ Lead
q SpringAOP의부족한점을보강
q Pointcut Expression Language
q POJO Aspect(XML Schema, @AspectJ)
q AspectJ language Aspect
q Spring bean이아닌 object에Aspect 적용가능 POJO
23
AOP의필요성
q POJO를유지하며다음의요구사항을충족하려면?
q Service Layer는반드시트랜잭션안에서실행되야한다
q Hibernate를직접이용하는 DAO작업이실패할때발생하는 exception을변환한다
q Controller/JSP에서는 DAO를바로호출할수없어야한다
q 중요한 busimess method 실행이실패하면여러차례재시도를한다
24
@AspectJ를이용한 Aspect설정
@AspectJpublic class EMailNotificationAspect {EMailService emailService;
@After(“execution(* com.xxx.yyy.service.*(String)) && args(msg)”)public void mailNotify(String msg) {eamilService.notifyByEmail(msg);
}…
}
<aop:aspectj-autoproxy />
<bean id=“emailNotificationAspect"class=“com.xxx.aspect.EMailNotificationAspect">
<property name=“emailService” ref=“emailService”/></bean>
25
XML을이용한 Aspect 설정
public class EMailNotificationAspect {EMailService emailService;
public void mailNotify(String msg) {eamilService.notifyByEmail(msg);
}… }
<aop:config><aop:aspect id=“emailNotification" ref=“emailNotificationAspect"><aop:after method=“mailNotify"pointcut="execution(* com.xxx.yyy.service.*(String)) &&
args(msg)“ /></aop:aspect>
</aop:config>
<bean id=“emailNotificationAspect"class=“com.xxx.aspect.EMailNotificationAspect">
<property name=“emailService” ref=“emailService”/></bean>
26
Portable Service Abstraction
q JPA Integration
q Spring의가장많은지원을받을 ORM
q 기존의 ORM지원기능과일관된방식지원q JpaTemplate
q JpaDaoSupport
q JpaTransactionManager
q JPA를위한추가기능q LocalEntityManagerFactoryBean 또는 JNDI
EntityManagerFactory
q Class File Transformer(LTW)
q AbstractJpaTests
q JPA Annotation 지원
POJO
Portable Service Abstraction
27
Portable Service Abstraction
q SimpleJdbcTemplate
q Java5의새로운기능을적용
q Varargs, Autoboxing, Parameterized methods
jdbcTemplate.queryForInt("SELECT COUNT(0) FROMT_CLIENT WHERE TYPE=? AND CURRENCY=?",new Object[] { new Integer(13), "GBP" }
);
jdbcTemplate.queryForInt("SELECT COUNT(0) FROMT_CLIENT WHERE TYPE=? AND CURRENCY=?",13, "GBP"
);
28
Portable Service Abstraction
q Asynchronous JMS q Message Driven POJO
q JMS의 MessageListener를대신해사용할수있는 SessionAwareMessageListener 지원q JMS Session을사용할수있다
q Reply message
q다양한 ListenerContainer 지원q DefaultMessageListenerContainer
q ServerSessionMessageListenerContainer
q SimpleMessageListenerContainer
29
Spring 2.0 Web Layer
q Form Tag 지원
<spring:bind path=“member.name”><input type=“text”
name=“${status.expression}”value=“${status.value}”
</spring:bind>
<form:input path=“name” />
30
Spring 2.0 Web Layer
q Portlet 지원
q SpringMVC와동일한개발방식지원
q DispatcherPortlet
q Handler Mappings
q Handler Interceptors
q Controller Hierachy
q View Resolvers
q Pluggable View
q Data Binding, Validation
31
Spring Portfolio
q Spring Framework의뛰어난유연성과확장성을통해서다양한확장프레임워크와솔루션의발전
q J2EE의전영역, 레이어, 다양한기술을지원
q Interface21뿐아니라다양한오픈소스개발자와기업을통해서자발적으로발전
q Spring Core Framework(SFW)과 서브프로젝트, 3-rd party product들로구성
32
Spring Portfolio
qData Access Layer
q JDBC, iBatis, JDO, Hibernate, TopLink지원
q JPA지원(Hibernate, OpenJPA, Toplink essentials)
q Enterprise system: CICS, JMS, JCA CCI
q Spring LDAP
33
Spring Portfolio
q Service Layer
q Scheduling:JDK Timer, Quartz
q Asychronous task: TaskExecutor (ThreadPool, CommonJ WorkManager)
q Messaging
q JMS기반의 Message Driven POJO
q Spring Web Services: (Castor, JAXB)
q ESB Integration: Mule
34
Spring Portfolio
qClustering
q Coherence’s DataGrid for Spring
q Terracotta
q Gigaspace for Spring
q Security
q Acegi Security (Spring Security)
35
Spring Portfolio
q Presentation Layer
q Spring Rich Client
q SpringMVC
q Spring Web Flow
q SpringIDE
q Ajax: DWR for Spring
36
Spring Portfolio
qWeb Services
q Simple RPC: XFire Exporter
q Spring Web Services
q OXM
q SpringMVC 방식의 Service Framework
qWS-Security와 SpringSecurity의통합
q AOP
q SpringAOP
q AspectJ
37
Spring Portfolio
q Spring OSGi
q Spring 2.1에서정식지원
q 새로운 Module/Hot deployment 표준
q Spring을이용해서 OSGi bundle을손쉽게작성
q OSGi namespace
38
Spring Portfolio
q다이나믹스크립트언어통합
q JRuby
q Groovy
q Beanshell
39
참고자료
q Expert One-on-One J2EE Development without EJBq Rod Johnson, Juegen Hoeller
q Spring 2.0 Reference Manualq http://static.springframework.org/spring/docs/2.0.x/ref
erence/index.html
q Spring 2.0 What’s New and Why It Mattersq http://www.infoq.com/articles/spring-2-intro
q From Spring One to Spring Two, Spring Fundamentals and Philosophy, JMS in Spring 2 Environment, Spring OSGi, Get Your JRuby Onq TheSpringExperience 2006
감사합니다!
Q & A
top related