Spring http://www.theserverside.com/articles/article.tss?l=springframework 2003/12 Spring Spring J2EE 1? 1 2 Spring 1 3 Spring? 3 3.1.................... 3 3.2 Inversion of control.................. 4 3.3 XmlBeanFactory...................... 7 3.4 JDBC.......... 11 3.5 O/R...................... 15 3.6...................... 17 3.7 AOP................................ 18 3.8 MVC................... 22 3.9 EJB.......................... 24 3.10 EJB............................ 25 3.11............................ 28 3.12 Spring?................... 29 3.13........................... 29 4 29 4.1........................... 30 4.2........................... 31 1
1? ( )J2EE Spring 2 3 spring Spring Spring Spring JDBC Spring Spring Spring Spring Spring 2003 2 Spring 2002 Expert One-on-One J2EE Designe and Development Expert One-on-One J2EE Spring 2000 2003 1 Spring SourceForge 6 10 2 Spring Spring 1
EJB Spring Struts J2EE API Spring Spring Spring Javadoc Spring JavaBean Inversion of Control( ) Spring Spring SpringAPI Spring Spring Spring Spring Spring EJB POJO EJB Spring EJB Spring EJB Web Spring EJB AOP JTA Spring JDBC Hibernate O/R 2
Spring 3 Spring? Spring 3.1 Spring Spring Spring J2EE Spring Spring (Commons Logging Commons DBCP) O/R Hibernate JDO Spring JTA Spring Struts MVC Web IoC AOP Spring (Spring Spring Expert One-on-One J2EE Design and Development Inversion of Control 3
Spring WebLogic Tomcat Resin JBoss WebShere 3.2 Inversion of control Spring org.springframework.beans JavaBeans Spring 2 : 1 : org.springframework.beans.factory XmlBeanFactory: XML DTD ListableBeanFactoryImpl: POJO( JavaBean ) 1 AOP 4
( EJB ) BeanFaftory JavaBeans Expert One-on-One J2EE Design and Development 4 ServerSide PDF (http://www.theserverside.com/articles/article.jsp?l=rodjohnsoninterview) BeanFactory Spring Inversion of Control ( EJB )Spring BeanFactory ) Inversion of Control! IoC EJB X IoC X (JavaBean ) XML IoC Spring IoC JavaBean setter EJB JNDI JavaBean Java JUnit IoC 5
IoC IoC API IoC Spring Jakarta Commons DBCP DataSource Spring IoC API JavaBean Spring IoC EJB IoC Spring IoC J2EE IoC IoC Apache Avalon PicoContainer HiveMind Avalon Avalon IoC PicoContainer JavaBean Spring 1 ( Java ) Spring PicoContainer IoC Spring (http://www.springframework.org/docs/ lightweight container.html) The Spring Framework - A Lightweight Container PicoContainer Spring Swing (EJB ) 6
Spring Spring Spring Spring IoC IoC EJB Spring ApplicationContext 3.3 XmlBeanFactory Spring bean definition XML Spring XML <beans> <beans> 1 <bean> ID J2EE 3 J2EE DAO DAO Jakarta Commons DBCP BasicDataSource ( )Java-Bean Spring 7
close Spring destroymethod BasicDataSource Spring <beans> <bean id="mydatasource" class="org.apache.commons.dbcp.basicdatasource" destroy-method="close"> <property name="driverclassname"> <value>com.mysql.jdbc.driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/mydb</value> </property> <property name="username"> <value>root</value> </property> </bean> </beans> BasicDataSource <value> Spring JavaBean DataSource DAO <ref> <bean id="exampledataaccessobject" class="example.exampledataaccessobject"> <property name="datasource"><ref bean="mydatasource"/></property> </bean> DAO int (exampleparam) <bean id="examplebusinessobject" class="example.examplebusinessobject"> <property name="dataaccessobject"><ref bean="exampledataaccessobject"/></property> <property name="exampleparam"><value>10</value></property> </bean> </beans> Spring Pico- Container autowire PicoContainer 8
(Spring ) autowire <bean id="examplebusinessobject" class="example.examplebusinessobject" autowire="bytype"> <property name="exampleparam"><value>10</value></property> </bean> Spring examplebusinessobject datasource datasource exampleparam Autowire CVS Spring 1.0M2(2003/10/20 ) 1.0M1 Java XML Java mydatasource XML Spring JNDI XML Java Spring EJB Spring public class ExampleBusinessObject implements MyBusinessObject { private ExampleDataAccessObject dao; private int exampleparam; 9
public void setdataaccessobject(exampledataaccessobject dao) { this.dao = dao; public void setexampleparam(int exampleparam) { this.exampleparam = exampleparam; public void mybusinessmethod() { // do stuff using dao XML Spring Spring Spring Spring JavaBeans Spring setdatasource() setexampleparam() 1 JavaBean Spring XML JavaBeans Spring Java.util.Properties J2EE Spring MVC Web Spring Struts WebWork, Web 10
Spring MVC Spring MVC root( ) Struts MVC EJB: Spring EJB EJB Jar XML EJB J2EE 3 InputStream is = getclass().getresourceasstream("myfile.xml"); XmlBeanFactory bf = new XmlBeanFactory(is); MyBusinessObject mbo = (MyBusinessObject) bf.getbean("examplebusinessobject"); Spring IoC Java J2EE 3.4 JDBC Spring JDBC API ResultSet ) JDBC SQLException. JDBC SQLException - SQL - SQLState 11
Spring 2 API SQL SQLException Spring DataSource SQLException org.springframework.dao.dataaccessexceptio SQLState Spring JDBC DAO JDBC Spring 2 JDBC API 1 org.springframework.jdbc.core - - Inversion of Control Spring JDO(PersistenceManager ) (JTA ) JNDI API Spring Spring JdbcTemplate SQL JdbcTemplate template = new JdbcTemplate(dataSource); final List names = new LinkedList(); template.query("select USER.NAME FROM USER",new RowCallbackHandler() { public void processrow(resultset rs) throws SQLException { names.add(rs.getstring(1)); ); SQLException Spring 12
JdbcTemplate Spring JDBC JDBC JDBC org.springframework.jdbc.object JDBC RDBMS - - Java API API JDO API class UserQuery extends MappingSqlQuery { public UserQuery(DataSource datasource) { super(datasource, "SELECT * FROM PUB_USER_ADDRESS WHERE USER_ID =?"); declareparameter(new SqlParameter(Types.NUMERIC)); compile(); // Map a result set row to a Java object protected Object maprow(resultset rs, int rownum) throws SQLException { User user = new User(); user.setid(rs.getlong("user_id")); user.setforename(rs.getstring("forename")); return user; public User finduser(long id) { // Use superclass convenience method to provide strong typing return (User) findobject(id); User user = userquery.finduser(25); DAO org.springframework.jdbc.object StoredProcedure Spring 1 13
Java Spring ( ) Spring 1 EJB Spring DataAccessException Spring Spring DAO try { // do work catch (OptimisticLockingFailureException ex) { // I m interested in this Spring try { // do work catch (OptimisticLockingFailureException ex) { // I m interested in this catch (DataAccessException ex) { // Fatal; just rethrow it 14
- - 2 (DataAccessException) (OptimisticLockingFailureException) Spring ( ) ( JDO ) JDBC API 1 TopLink JDO Gavin King Hibernate Spring JDBC JDBC final RDBMS RDBMS API DAO JDBC JDBC SQL Spring JDBC Spring 3.5 O/R O/R Spring Hibernate 2.x 15
JDO Spring Hibernate Hibernate Hibernate Spring Spring Spring Hibernate Hibernate Hibernate Spring AOP Java Hibernate Spring Spring Hibernate JDBC Spring Hibernate AOP Java ( ) Hibernate JDBC Hibernate Hibernate Spring Hibernate catch/throw JDBC (DB ) JDBC 16
Hibernate API API Spring Hibernate Hibernate /DAO IoC Hibernate Hibernate Spring inversion of control Hibernate ( 3.6 API JTA API J2EE EJB CMT Spring Spring JdbcTemplate JTA EJB CMT EJB Spring JTA Spring (JDBC ) JTA JTA XA 2 17
JDBC Hibernate JTA JTA J2EE JTA Spring JDBC Hibernate Spring JTA Spring 3.7 AOP AOP Spring AOP J2EE POJO JBoss4 Spring AOP Web EJB WebLogic,Tomcat,JBoss,Resin,Orion Web Spring AOP AOP AspectJ mixin 18
Spring ( 1 ) ( 1 ) Spring AOP OOP OOP 5 10 AOP AOP ( AspectJ ) Spring AOP ( ) )CGLIB Spring AOP (http://www.sourceforge.net/ projects/aopalliance/) AOP AOP TheServerSide AOP Spring AOP EJB POJO ( EJB Spring AOP ) Spring Spring AOP TransactionTemplate 19
POJO JTA JDBC,Hibernate API Spring EJB CMT POJO Spring API POJO ThreadLocal EJBContext EJB ( Throwable ) Spring EJB Spring API(EJB EJBContext ) JTA Spring SpringAOP AOP Spring J2EE 20
Spring AOP Spring Spring XML AOP <bean id="mytest" class="org.springframework.aop.framework.proxyfactorybean"> <property name="proxyinterfaces"> <value>org.springframework.beans.itestbean</value> </property> <property name="interceptornames"> <list> <value>txinterceptor</value> <value>target</value> </list> </property> </bean> AOP ProxyFactoryBean BeanFactory getbean() ( ) ProxyFactoryBean interceptornames String ( prototype ) target invoker interceptor mytest <ref> Spring IoC 21
BeanFactory AOP TestBean target = new TestBean(); DebugInterceptor di = new DebugInterceptor(); MyInterceptor mi = new MyInterceptor(); ProxyFactory factory = new ProxyFactory(target); factory.addinterceptor(0, di); factory.addinterceptor(1, mi); // An "invoker interceptor" is automatically added to wrap the target ITestBean tb = (ITestBean) factory.getproxy(); Java AOP Spring AOP Jon Tirsen Nanning Aspects(http://nanning.codehaus.org/) AOP EJB Spring 3.8 MVC Spring MVC Web Spring MVC Struts MVC Spring Controller Struts Action Spring MVC Struts Spring JavaBean Spring MVC ( Java )Struts Spring MVC Spring MVC Spring MVC JSP Velocity XSLT 22
Spring View Spring Controller IoC Spring Web Struts Spring Struts1.1 Spring MVC Spring Controller handlerequest() Google public class GoogleSearchController implements Controller { private IGoogleSearchPort google; private String googlekey; public void setgoogle(igooglesearchport google) { this.google = google; public void setgooglekey(string googlekey) { this.googlekey = googlekey; public ModelAndView handlerequest(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String query = request.getparameter("query"); GoogleSearchResult result = // Google // google google.dogooglesearch(this.googlekey, query, start, maxresults, filter, restrict, safesearch, lr, ie, oe); return new ModelAndView("googleResults", "result", result); 23
IGoogleSearchPort GLUE Spring FactoryBean IoC Java EJB Spring Thomas Risberg Spring MVC (http://www.springframework.org/ docs/mvc-step-by-step/spring-mvc-step-by-step.html) Spring MVC Web MVC with the Spring Framework(http://www.springframework.org/docs/web mvc.html). MVC Spring MVC Spring Spring Spring Struts WebWork Tapestry 3.9 EJB EJB Spring EJB EJB EJB POJO ( EJB )Spring EJB Jar XML BeanFactory EJB import org.springframework.ejb.support.abstractstatelesssessionbean; public class MyEJB extends AbstractStatelessSessionBean implements MyBusinessInterface { private MyPOJO mypojo; 24
protected void onejbcreate() { this.mypojo = getbeanfactory().getbean("mypojo"); public void mybusinessmethod() { this.mypojo.invokemethod(); MyPOJO ( ) XML Spring ejb-jar.xml ejb/beanfactorypath XML <session> <ejb-name>mycomponent</ejb-name> <local-home>com.test.ejb.myejbbeanlocalhome</local-home> <local>com.mycom.mycomponentlocal</local> <ejb-class>com.mycom.mycomponentejb</ejb-class> <session-type>stateless</session-type> <transaction-type>container</transaction-type> <env-entry> <env-entry-name>ejb/beanfactorypath</env-entry-name> <env-entry-type>java.lang.string</env-entry-type> <env-entry-value>/mycomponent-ejb-beans.xml</env-entry-value></env-entry> </env-entry> </session> mycomponent-ejb-beans.xml EJB Jar EJB XML EJB Jar Spring setysessioncontext() ejbcreate() EJB Spring onejbcreate() 3.10 EJB Spring EJB EJB EJB 25
JNDI EJB EJB create() EJB API EJB EJB Sun OTN J2EE EJB Spring Spring JDNI EJB EJB EJB EJB ( ) MyComponent MyComponent Spring EJB Java Web EJB MyComponent private MyComponent mycomponent; public void setmycomponent(mycomponent mycomponent) { this.mycomponent = mycomponent; 26
Spring XML LocalStatelessSessionProxyFactoryBean EJB Spring MyComponent <bean id="mycomponent" class="org.springframework.ejb.access.localstatelesssessionproxyfactorybea <property name="jndiname"><value>mycomponent</value></property> <property name="businessinterface"><value>com.mycom.mycomponent</value></property> </bean> <bean id="mycontroller" class = "com.mycom.mycontroller"> <property name="mycomponent"><ref bean="mycomponent"/></property> </bean> AOP Spring AOP mycomponent EJB EJB JDNI 1 EJB EJB create() EJB mycontroller mycontroller EJB Web EJB EJB POJO Java mycomponent JNDI EJB 1 ( EJB ) EJB 27
EJB org.springframework.ejb.access.simpleremotestatelesssessionproxyfactorybean EJB EJB RemoteException 3.11 Spring Spring 1.0M1 75 1.0RC1 80% CVS Spring IoC JNDI J2EE Spring Spring Spring 28
3.12 Spring? Spring Spring ( Spring JDBC 3.13 Spring 1.0 1.0 AOP ( ) C# Spring1.0 JSR-175 1.0 JDBC JMS IDE 4 Spring J2EE Spring 29
Spring JavaBean Inversion of Control Spring IoC Spring JDBC Spring Hibernate O/R Spring JTA JDBC Spring Java AOP POJO - - EJB EJB Spring MVC IoC 4.1 Spring Expert One-on-One J2EE Design and Development(Rod Johnson,Wrox, 2002,)[ : J2EE ]. Spring Spring Spring : http://www.springframework.org. Javadoc Sourceforge Spring Spring Spring 30
4.2 Java 7 J2EE Expert One-on-One J2EE Dedign and Development(Wrox, 2002) J2EE Wiley J2EE Rod 2 Java 31