SlideShare una empresa de Scribd logo
1 de 208
spring in action
一、开始 spring 之旅 ,[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],实例化 设置属性值 调用 BeanNameAware 的 setBeanName() 方法 调用 BeanFactoryAware 的 setBeanFactory() 方法 调用 BeanPostProcessor 的 预初始化方法 调用 InitializingBean 的 afterPropertiesSet() 方法 调用调用定制的初始化方法 调用 BeanPostProcessor 的 后初始化方法 Bean 可以使用了 容器关闭 调用 DisposableBean 的 destory() 方法 调用定制的销毁方法 Bean 在 Spring Bean 工厂中的生命周期
二、装配 Bean ,[object Object],[object Object],实例化 设置属性值 调用 BeanNameAware 的 setBeanName() 方法 调用 BeanFactoryAware 的 setBeanFactory() 方法 调用 BeanPostProcessor 的 预初始化方法 调用 InitializingBean 的 afterPropertiesSet() 方法 调用调用定制的初始化方法 调用 BeanPostProcessor 的 后初始化方法 Bean 可以使用了 容器关闭 调用 DisposableBean 的 destory() 方法 调用定制的销毁方法 Bean 在 Spring Bean 应用上下文中的生命周期 调用 ApplicationContextAware 方法 setApplicationContext() 方法
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object]
二、装配 Bean ,[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],CourseService CourseService CourseService 安 全 事 务 其 他
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],通知 程序执行 切 入 连接点
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],当目标方法抛出异常时调用 在目标方法调用后调用 在目标方法调用前调用 拦截对目标方法调用 描述 Org.springframework.aop. ThrowsAdvice Org.springframework.aop. AfterReturningAdvice Org.springframework.aop. BeforeAdvice Org.springframework.aop. MethodInterceptor 接口 Around Before After Throws 通知类型
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],public class WelcomeAdvice implements MethodBeforeAdvice{ public void before(Method m,Object[] os,Object target){ Customer c = (Customer)arg[0]; System.out.println(c.getName()); } } --------------------------------------------- // 创建目标代理对象 <bean id=“kwikEMartTarget” class=“…ApuKwikEMart” /> <bean id=“welcomeAdvice” class=“…WelcomeAdvice” /> <bean id=“kwikEMart” class=“……ProxyFactoryBean”> <property name=“proxyInterfaces”><value>……KwikEMart</value></property> <property name=“interceptorNames”> <list><value>welcomeAdvice</value></list> </property> <property name=“target”><ref bean=“kwikEMartTarget” /></property> </bean>
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],<bean id=“xxxTarget” class=“xxxServiceImpl”/> <bean id=“xxxAdvice” class=“”/> <bean id=“xxxAdvisor” class=“…NameMatchMethodPointcutAdvisor”> <property name=“mappedName”> <value>order*<value> </property> <property name=“advice”> <ref bean=“xxxAdvice” /> </property> </bean> <bean id=“xxxService” class=“…ProxyFactoryBean”> <property name=“proxyInterfaces”> <value>……xxxService</value> </property> <property name=“interceptorNames”> <list><value>xxxAdvisor</value></list> </property> <property name=“target”><ref bean=“xxxTarget” /></property> </bean>
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],setFoo setFoo setFoo setFooBar 不匹配 bar.setFoo setFoo setFooB, setFooBar setFooBar  setFooB setFooB  匹配 setFoo. setFoo.* setFoo.+ setFoo. 示例 匹配任何正则表达式符号 匹配前一个字符 0 次或多次 匹配前一个字符一次或多次 匹配任何单个字符 描述 . + * 符号
三、创建切面 ,[object Object],[object Object],<bean id=“xxxTarget” class=“xxxServiceImpl”/> <bean id=“xxxAdvice” class=“”/> <bean id=“xxxAdvisor” class=“…RegExpPointcutAdvisor”> <property name=“pattern”> <value>.*get.+bar.+<value> </property> <property name=“advice”> <ref bean=“xxxAdvice” /> </property> </bean> <bean id=“xxxService” class=“…ProxyFactoryBean”> <property name=“proxyInterfaces”> <value>……xxxService</value> </property> <property name=“interceptorNames”> <list><value>xxxAdvisor</value></list> </property> <property name=“target”><ref bean=“xxxTarget” /></property> </bean> 该规则表示任何类的以 get 开头,后面至少有一个字符,然后跟着 by, 后面至少有一个字符的方法
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],<bean id=“xxxTarget” class=“xxxServiceImpl”/> <bean id=“xxxAdvice” class=“”/> <bean id=“xxxPointcut” class=“…ControlFlowPointcut”> <contructor-arg”> <value>javax.servlet.http.HttpServlet</value> </contructor-arg> </bean> <bean id=“xxxAdvisor” class=“…DefaultPointcutAdvisor”> <property name=“advice”> <ref bean=“xxxAdvice” /> </property> <property name=“pointcut”> <ref bean=“xxxPointcut”> </property> </bean> <bean id=“xxxService” class=“……ProxyFactoryBean”> …… </bean>
三、创建切面 ,[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],class AuditableIntroductionInterceptor extends DelegatingIntroductionInceptor{ private Date lastModifiedDate ; public Date getLastModifiedDate(){} public void setLastModifiedDate(Date date){} } 如果你的混合体要改变任何目标对象方法的行为的话,你就需要实现 invoke() 方法。 public Object invoke(MethodInvcation mi) throws Throwable{ String name = mi.getMethod().getName(); if(name.indexof(“set”) == 0){ throw new IllegalModificationException(); } return super.invoke(mi); } 我们复写了 invoke 方法,所以他拦截所有的方法的调用。注意我们调用的 super.invoke() 而 不是 mi.proceed(). 这样做是因为父类 DelegatingIntroductionInterceptorkeyijiang 可以 决定哪个类负责处理这个方法调用。这一点需要注意,当需要复写 invoke 方法时,你需要调用 super.invoke 方法来确保调用正确的方法。
三、创建切面 <bean id=“xxxTarget” class=“xxxServiceImpl” /> <bean id=“myDelegatingIntroductionInterceptor” class=“xxxMyDelegatingIntr..” /> <bean id=“xxxAdvisor” class=“DefaultIntroductionAdvisor” singleton=“false”> <constructor-arg> <ref bean=“myDelegatingIntroductionInterceptro” /> </constructor-arg> </bean> <bean id=“xxx” class=“…ProxyFatoryBean”> <property name=“proxyTargetClass”> <value>true</value> </property> <property name=“singleton”> <value>false</value> </property> <property name=“proxyInterfaces”> <value>xxxService</value> </property> <property name=“interceptorNames”> <list> <value>xxxAdvisor</value> </list> </property> <property name=“target”><ref bean=“xxxTarget”/></property> </bean>
三、创建切面 ,[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],目标对象是否需要得到当前代理。 是用的 ProxyFactoryBean 实现。 spring 有两种实现: jdk 动态代理和 CGLIB 。通常不需要使用该属性。 是否返回同一个实例。 需要应用到目标对象上的通知的名字。可以是拦截器、 Advisor 或其他通知类型的名字。这个属性必须按照 beanFactory 中的使用顺序设置。 代理应该实现的接口列表 代理的目标对象 使用 target proxyInterfaces interceptorNames singleton exposeProxy aopProxyFactory 属性
三、创建切面 ,[object Object],是否对创建的代理进行优化 ( 只适用于 CGLIB) 。这会带来性能的提升,不过要慎用。 optimize 是否代理目标对象,而不是接口。只能在使用 CGLIB ( 即部署了 cglib 包 ) 时使用。 ProxyTargetClass 一旦工厂被创建,是否可以修改代理的通知。当为 true 时,运行时就不能修改 ProxyFactoryBean 了。通常不需要使用这个属性。 frozen 使用 属性
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],public class PerformancethreshodInterceptor implements MethodInterceptor{ private final long thresholdInMillis ; … public Object invoke(MehtodInvocation mi){ long t = System.currentTimeMillis(); Object o = mi.proceed(); t = System.currenttimeMillis – t ; if(t > thresholdInMillis ){ …… . } return o ; } }
三、创建切面 ,[object Object],[object Object],<bean id=“performanceThresholdInterceptor” class=“…” > <constructor-arg> <value>5000</value> </constructor-arg> </bean> <bean id=“performanceThresholdProxyCreator” class=“…BeanNmaeAutoProxyCreator”> <property name=“beanNames”> <list> <values>*Service</values> </list> </property> <property name=“interceptorNames”> <value>performanceThresholdInterceptor<value> </property> </bean>
三、创建切面 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
三、创建切面 ,[object Object],[object Object],<bean id=“xxxInterceptor” class=“” /> <bean id=“advisor” class=“…RegexpMethodPointcutAdvisor”> <property name=“advice”> <ref beam=“xxxInterceptor”  /> <property> <property name=“pattern”> <value>.+Service.+</value> </property> </bean> <bean id=“autoProxyCreator” class=“…DefaultAdvisorAutoProxyCreatro” />
四、征服数据库 ,[object Object],[object Object],服务对象 数据访问接口 数据访问实现
四、征服数据库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
四、征服数据库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
四、征服数据库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
四、征服数据库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
四、征服数据库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
四、征服数据库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
四、征服数据库 ,[object Object],[object Object],<bean id=“dataSource”  class=“org.springframework.jndi.JndiObjectFactoryBean”> <property name=“jndiName”> <value>java:comp/env/jdbc/trainingDatasource</value> </property> </bean> <bean id=“sessionFactory” class=“org.springframework.orm.hibernate .LocalSessionFactoryBean”/> <property name=“dataSource”> <ref bean=“dataSoure”/> </property> </bean>
四、征服数据库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
四、征服数据库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
四、征服数据库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
四、征服数据库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
四、征服数据库 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
四、征服数据库 ,[object Object],[object Object],[object Object]
征服数据库 ,[object Object]
五、事务管理 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
五、事务管理 ,[object Object],[object Object],[object Object],[object Object],当 apache 的 ojb 用作持久化机制时,用它来管理事务。 使用一个 JTA 实现来管理事务。在一个事务跨越多个数据源时使用 当持久化机制是 Jdo 时,用它来管理事务。 当持久化机制是 hibernate 时,用它来管理事务 在单一的 JDBC Datasource 中的管理事务 目标 org.springframework.jdbc.datasource.DataSourceTransactionManager org.springframework.orm.hibernate.HibernateTransactionManager org.springframework.jdo.JdoTransactionManager org.springframework.transaction.jta.JtaTransactionManager org.springframework.orm.ojb.PersistenceBrokerTransactionManager 事务管理器实现
五、事务管理 ,[object Object],[object Object],platformTransactionmanager datasource Transaction manager hibernate Transaction manager jdo Transaction manager persistence Broker Transaction manager JTA Transaction manager jdbc hibernate JDO OJB JTA 每种事务管理器都充当了对特定平台的事务实现的代理。这样我们就只需要和 spring 中的事务打交道, 而不用关系实际上事务实现是什么样的。要使用一个事务管理器,你得再上下文中声明他。 程序控制事务管理能让你在代码中精确定义事务边界,声明式事务帮助把一个操作从事务规则中分离出 来。
五、事务管理 ,[object Object],[object Object],[object Object],<bean id=“transaction”  class=“…DataSourceTransactoinManager”> <property name=“dataSource”> <ref bean=“dataSource”> </property> </bean> 在幕后, DataSourceTransactionManager 通过调用从 DataSource 得到的 Connection 对象来管理事务。 如: conn.rollback() conn.commit()
五、事务管理 ,[object Object],[object Object],Hibernate 事务: <bean id=“transactionManager” class=“…HibernateTransactionManager”> <property name=“sessionFactory”> <ref bean=“sessionFactory” /> </property> </bean> 其中 sessionFactory 属性必须和一个 Hibernate 的 SessionFactory 绑定 HibernateTransactionManager 把事务管理委托给一个从 Hibernate  session  中取得的 net….Transaction 对象。当一个事务成功完成时, HibernateTransactionManager 将调用 Transaction 对象的 commit() 方法。类似的,当一个事务失败时, Transaction 对象的 rollback() 方 法将被调用。
五、事务管理 ,[object Object],[object Object],[object Object],[object Object]
五、事务管理 ,[object Object],public void enrollStudentIncourse(){ transactionTemplate.execute(){ new TransactionCallback(){ public Object doInTransaction(TransactionStatus ts){ try{ //do stuffr } catch(Exception e){ ts.setRollbackOnly(); } return null; } } }; }
五、事务管理 ,[object Object],注入事务模板: <bean id=“transactionTemplate” class=“…TransactionTemplate”> <property name=“transactionManager”> <ref bean=“transactionManager” /> </property> </bean> <bean id=“courseService” class=“…CourseServiceImpl” > <property name=“transactionTemplate”> <ref bean=“transactionTemplate” /> </property> </bean>
五、事务管理 ,[object Object],[object Object],[object Object],public void enrollStudentInCourse(){ transactionTemplate.execute( new TransactionCallback(){ public Object doInTransaction(TransactionStatus ts){ try{ //do stuff  } catch(Exception e){ ts.setRollbackOnly(); } return null; } } ); }
五、事务管理 ,[object Object],<bean id=“transactionTemplate”  class=“org.springframework.transaction.support.TransactionTemplate”> <property name=“transactionManager”> <ref bean=“transactionManager” /> </property> </bean> <bean id=“courseService” class=“CourseServiceImpl”> <property name=“transactionTemplate”> <ref bean=“transactionTemplate” /> </property> </bean>
五、事务管理 ,[object Object],[object Object],[object Object],[object Object]
五、事务管理 ,[object Object],<bean id=“courseService”  class=“org.springframework.transaction.interceptor.TransactionProxyFactoryBean”> <property name=“proxyInterfaces”> <list> <value>CourseService</value>  代理所实现的接口 </list> </property> <property name=“target”> <ref bean=“courseServiceTarget” />  被代理的对象 </property> <propety name=“transactionManager”> <ref bean=“transactionManager” />  事务管理器 </property> <property name=“transactionAttributeSource”> <ref bean=“attributeSource” />  事务的属性源 </property> </bean>
五、事务管理 ,[object Object],[object Object],[object Object],表示该方法不应在事务中运行。如果一个现有的事务正在运行,他将在该方法的运行期间被挂起。如果使用 jta 的事务管理器,需要访问 jtatansactionmanager. 当前的方法不应该运行在一个事务上下文中。如果当前存在一个事务,则会抛出一个异常。 若当前已经存在一个事务,则该方法应当运行在一个嵌套的事务中。被嵌套的事务可以从当前事务中单独的提交或回滚。若当前事务不存在,则看起来就和 PROPAGATION_REQUIRED 没有两样。 该方法必须运行在一个事务中。如果当前事务不存在,将抛出一个异常。 意义 PROPAGATION_MANDATORY PROPAGATION_NESTED PROPAGATION_NEVER PROPAGATION_NOT_SUPPORTED 传播行为
五、事务管理 ,[object Object],[object Object],[object Object],传播规则回答了一个问题,就是新的事务是否要被启动或是挂起,或者方法是否要在事务环境中运行。 当前方法不需要事务处理环境,但如果有一个事务已经在运行的话,这个方法也可以在这个事务里运行。 PROPAGATION_SUPPORTS 表示当前方法必须运行在它自己的事务里。他将启动一个新的事务。如果一个现有事务在运行的话,将在这个方法运行期间被挂起。若使用 jtaTransactionManager ,则需要访问 transactionManager 表示当前方法必须运行在一个事务中。若一个现有的事务正在进行中,该方法将会运行在这个事务中。否则的话,就要开一个新的事务。 意义 PROPAGATION_REQUIRES_NEW PROPAGATION_REQUIRED 传播行为
五、事务管理 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
五、事务管理 ,[object Object],[object Object],[object Object],完全服从 ACID 的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。 对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,幻读仍可能发生。 允许在并发事务已经提交后读取。可防止脏读,但幻读和 不可重复读仍可发生。 允许你读取还未提交后数据。可能导致脏、幻、不可重服 使用后端数据库默认的隔离级别 含义 ISOlATION_DEFAULT ISOLATION_READ_UNCOMMITED ISOLATION_READ_COMMITTED ISOLATION_REPEATABLE_READ ISOLATION_SERIALABLE 隔离级别
五、事务管理 ,[object Object],[object Object],[object Object],[object Object]
五、事务管理 ,[object Object],[object Object],[object Object],[object Object]
五、事务管理 ,[object Object],[object Object],public interface TransactionAttributeSource{ public TransactionAttribute getTransactionAttribute(Method ,tartgetClass); } 总是匹配事务属性源: <bean id=“transactionAttributeSource” class=“org…..MatchAlwaysTransactionAttributeSource”> …… </bean>
五、事务管理 ,[object Object],[object Object],[object Object]
五、事务管理 ,[object Object],[object Object],[object Object],<bean id=“myTransactionAttribute” class=“org……DefaultTransactionAttribute”> <property name=“propagationBehaviorName”> <value>PROPAGATION_REQUIRES_NEW</value> </property> <property name=“isolationLevelName”> <value>ISOLATION_REPEATABLE_READ</value> </property> </bean>
五、事务管理 ,[object Object],[object Object],[object Object],<bean id=“transaction” class=“org…MatchAlwaysTransactionAttributeSource”> <property name=“transactionAttribute”> <ref bean=“myTransactionAttribute” /> </property> </bean> --------------------------------------------------------------------------------- 虽然可以改变事务属性参数,但总是返回相同的事务属性,而不关心参与交易的是哪 个方法。如果对不同的方法应用不同的事务策略时,使用 NameMatchTransactionAttributeSource 类。
五、事务管理 ,[object Object],[object Object],[object Object],<bean id=“transactionAttributeSource” class=“org……NameMatchTransactionAttributeSource”> <property name=“properties”> <props> <prop key=“enrollStudentIncourse”> PROPAGATION_REQUIRES_NEW </prop> </props> </property> </bean>
五、事务管理 ,[object Object],[object Object],[object Object],PROPAGATION,ISOLATION,readonly,-Exception,+Exception 传播行为 隔离级别 ( 可选 ) 是否只读 ( 可选 ) 回滚规则 ( 可选 ) <bean id=“transactionAttributeSource” class=“org……NameMatchTransactionAttributeSource”> <property name=“properties”> <props> <prop key=“enrollStudentIncourse”> PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ </prop> </props> </property> </bean>
五、事务管理 ,[object Object],[object Object],[object Object],<bean id=“transactionAttributeSource” class=“org……NameMatchTransactionAttributeSource”> <property name=“properties”> <props> <prop key=“enrollStudentIncourse”> PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ, readOnly </prop> </props> </property> </bean>
五、事务管理 ,[object Object],[object Object],[object Object],<bean id=“transactionAttributeSource” class=“org……NameMatchTransactionAttributeSource”> <property name=“properties”> <props> <prop key=“enrollStudentIncourse”> PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ, -CourseException </prop> </props> </property> </bean> --------------------------------------------------------------------------------------------------- 负号异常抛出时,触发回滚,正号异常抛出时,事务仍可提交。
五、事务管理 ,[object Object],[object Object],[object Object],<bean id=“transactionAttributeSource” class=“org……NameMatchTransactionAttributeSource”> <property name=“properties”> <props> <prop key=“get*”> PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ, -CourseException </prop> </props> </property> </bean> --------------------------------------------------------------------------------------------------- 负号异常抛出时,触发回滚,正号异常抛出时,事务仍可提交。
五、事务管理 ,[object Object],[object Object],[object Object],<bean id=“transactionAttributeSource” class=“org……TransactionProxyFactoryBean”> … <property name=“transactionProperties”> <props> <prop key=“enrollStudentInCourses”> PROPAGATION_REQUIRES_NEW,ISOLATION_REPEATABLE_READ, -CourseException </prop> </props> </property> </bean> 将事务属性设置到 transactionProperties 属性中和把 NameMatchTransactionAttributeSource 置入到 transactionAttributeSource 中的功能是一样的。
五、事务管理 ,[object Object],[object Object],<bean id=“transactionAttributeSource” class=“org……AttributeTransactionAttributeSource”> <constructor-arg> <ref bean=“attributesImpl” /> </constructor> </bean>
五、事务管理 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
五、事务管理 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
五、事务管理 ,[object Object],[object Object],<bean id=“abstractTxDefinition” class=“org……TransactionProxyFactoryBean” lazy=“true”> <property name=“transactionManager”> <ref bean=“transactionManager” /> </property> <property name=“transactionAttributeSource”> <ref bean=“attributeSource” /> </property> </bean> <bean id=“courseService” parent=“abstractTxDefinition”> <property name=“target”> <ref bean=“courseServiceTarget”/> </property> </bean>
事务管理 ,[object Object],[object Object],<bean id=“autoProxy” class=“org……DefaultAdvisorAutoProxyCreator”> </bean>
远程调用 ,[object Object],访问 webservices Jax-rpc 访问对 ejb 实现的遗留的 j2ee 系统 考虑网络限制时,访问基于 spring 的服务 考虑网络限制,通过 http 访问基于 java 的服务 不考虑网络限制(防火墙),访问公开基于 java 的服务 使用场景 RMI Hession 或 burlap http invoker Ejb RPC 模式
远程调用 ,[object Object],服务接口 代理 服务接口 客户端 服务 将远程方法调用序列化和反序列化
远程调用 ,[object Object],服务接口 服务 bean RemoteExporter 客户端 将远程方法调用序列化和反序列化
远程调用 ,[object Object],[object Object],<bean id=“paymentService” class=“org.sf.remoting.rmi.RmiProxyFactoryBean”> <property name=“serviceUrl”> <value>rmi://${paymenthost}/PayService</value> </property> <property name=“serviceInterface”> <value>com…..PaymentService</value> </property> </bean>
远程调用 ,[object Object],[object Object],<bean id=“paymentService” class=“org.sf.remoting.rmi.RmiProxyFactoryBean”> <property name=“serviceUrl”> <value>rmi://${paymenthost}/PayService</value> </property> <property name=“serviceInterface”> <value>com…..PaymentService</value> </property> </bean> -------------------------------------------------------------------------------------------------------- <bean id=“org………remoting.rmi.RmiServiceExporter”> <property name=“service”> <ref bean=“paymentService”> </property> <property name=“service”> <ref bean=“paymentService”> </property> <property name=“service”> <ref bean=“paymentService”> </property> </bean>
<bean id=“paymentService” class=“org.sf.remoting.rmi.RmiProxyFactoryBean”> <property name=“serviceUrl”> <value>rmi://${paymenthost}/PayService</value> </property> <property name=“serviceInterface”> <value>com…..PaymentService</value> </property> </bean> ------------------------------------------------------------------------------------ <bean id=“org………remoting.rmi.RmiServiceExporter”> <property name=“service”> <ref bean=“paymentService”> </property> <property name=“serviceName”> <value>Payment</value> </property> <property name=“serviceInterface”> <value>……PaymentService</value> </property> </bean>
远程调用 ,[object Object],[object Object],<bean id=“paymentService” class=“org……HttpInvokerProxyFactoryBean”> <property name=“serviceUrl”> <value>http://${servername}/${contextpath}/pay.service</value> </property> <property name=“serviceInterface”> <value>com……PaymentService</value> </property> </bean>
远程调用 ,[object Object],[object Object],<bean id=“httpPaymentService” class=“org……HttpInvokerServiceExporter”> <property name=“service”> <ref bean=“paymentService” /> </property> <property name=“serviceInterface”> <value>com……PaymentService</value> </property> </bean>
访问企业级服务 ,[object Object],<bean id=“mailSender” class=“…..JavaMailSenderImpl”> <property name=“host”> <value>mail.springinaction.com</value> </property> </bean> host: 邮件服务器主机名。 默认端口 25 。可通过 <proerty name=“port”> 修改 -------------------------------------------------------- 消息模版 <bean id=“mailMessage” class=“…..SimpleMailMessage”> <property name=“to”> <value>dd@dd.com</value> </property> <property name=“from”> <value>dd@dd.com</value> </property> <property name=“subject”> <value>sss</value> </property> </bean>
访问企业级服务 class XXX extends TimerTask{ public void run(){   …… } } ------------------------------------- 调度定时器任务 <bean id=“schedualTask” class=“org……ScheduleTimerTask”> <property name=“timerTask”> <ref bean=“myTimerTask” /></property> <property name=“period”><86400000</value></property> <property name=“delay”>3600000</property> </bean>
访问企业级服务 ,[object Object],[object Object],[object Object],class XXX extends TimerTask{ public void run(){   …… } } ------------------------------------- 调度定时器任务 <bean id=“schedualTask” class=“org……ScheduleTimerTask”> <property name=“timerTask”> <ref bean=“myTimerTask” /></property> <property name=“period”><86400000</value></property> <property name=“delay”>3600000</property> </bean> 启动任务: <bean class=“TimerFactoryBean”> <period 86400000(24 小时 ) <delay 3600000>
访问企业级服务 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
访问企业级服务 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
访问企业级服务 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
访问企业级服务 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
访问企业级服务 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
访问企业级服务 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
访问企业级服务 ,[object Object],[object Object],class XXX extends TimerTask{ public void run(){   …… } } ------------------------------------- 调度定时器任务 <bean id=“schedualTask” class=“org……ScheduleTimerTask”> <property name=“timerTask”> <ref bean=“myTimerTask” /></property> <property name=“period”><86400000</value></property> <property name=“delay”>3600000</property> </bean>
第八章 建立 web 层 ,[object Object],DispatcherServlet HandlerMapping Controller ViewResolver View ModelAndView
第八章 建立 web 层 ,[object Object],[object Object],<servlet> <servlet-name>action</servlet-name> <servlet-value>……DispatcherServer</servlet-value> </servlet> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping>
第八章 建立 web 层 ,[object Object],[object Object],分解应用上下文 <listener> <listener-class>……ContextLoaderListener</listener-class> </listener> -------------------- 或 <servlet> <servlet-name>context</servlet-name> <servlet-class>……ContextLoaderServlet</servlet-class> <servlet> 不管使用哪种上下文载入器,都需要告诉它配置文件的位置。如果没有指定,将默认需寻找 /WEB-INF/application-Context.xml 。但还可以通过设定 contextConigLocation  参数来指定 多个配置文件。 <context-parm> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/xxx.xml,xxxxx.xml</param-value> </context-parm>
第八章 建立 web 层 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
第八章 建立 web 层 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
第八章 建立 web 层 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
第八章 建立 web 层 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
第八章 建立 web 层 ,[object Object],[object Object],[object Object],[object Object]
第八章 建立 web 层 ,[object Object],[object Object],<bean id=“” class=“ BeanNameUrlHandlerMapping ” /> <bean  name=“/listCourses.htm ” class=“….ListCoursesController”> <property name=“”> <ref/> </property> </bean>
第八章 建立 web 层 ,[object Object],[object Object],<bean id=“” class=“ SimpleUrlHandlerMapping ”> <property name=“mappings”> <props> <prop key=“/xxx.service”>xxxController</prop> <prop key=“/xxx.service”>xxxController</prop> … </props> </property> </bean>
第八章 建立 web 层 ,[object Object],[object Object],<bean id=“” class=“BeanNameUrlHandlerMapping”> <property name=“ order ”><value>1</value></property> </bean> <bean id=“” class=“SimpleUrlHandlerMapping”> <property name=“ order ”><value>2</value></property> </bean>
第八章 建立 web 层 ,[object Object],复杂多页面的输
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件
Spring课件

Más contenido relacionado

Destacado

carguero
carguerocarguero
carguerounpulso
 
Sólo Queda Nadie
Sólo Queda NadieSólo Queda Nadie
Sólo Queda Nadieautobombo
 
A canoa (Paulo Freire)
A canoa (Paulo Freire)A canoa (Paulo Freire)
A canoa (Paulo Freire)lgrmattos50
 
Things you probably don't do
Things you probably don't doThings you probably don't do
Things you probably don't doguest7418e5
 

Destacado (6)

carguero
carguerocarguero
carguero
 
Sólo Queda Nadie
Sólo Queda NadieSólo Queda Nadie
Sólo Queda Nadie
 
A canoa (Paulo Freire)
A canoa (Paulo Freire)A canoa (Paulo Freire)
A canoa (Paulo Freire)
 
4a Buenos Aires Consume
4a Buenos Aires Consume4a Buenos Aires Consume
4a Buenos Aires Consume
 
Week 2
Week 2Week 2
Week 2
 
Things you probably don't do
Things you probably don't doThings you probably don't do
Things you probably don't do
 

Más de Shilong Sang

C:\Documents And Settings\User\桌面\Installation Guide O Oo3
C:\Documents And Settings\User\桌面\Installation Guide O Oo3C:\Documents And Settings\User\桌面\Installation Guide O Oo3
C:\Documents And Settings\User\桌面\Installation Guide O Oo3Shilong Sang
 
7月~12月份影片概况 0703更新
7月~12月份影片概况 0703更新7月~12月份影片概况 0703更新
7月~12月份影片概况 0703更新Shilong Sang
 
groovy经典入门
groovy经典入门groovy经典入门
groovy经典入门Shilong Sang
 
针对 Java程序员的 U M L概述
针对 Java程序员的 U M L概述针对 Java程序员的 U M L概述
针对 Java程序员的 U M L概述Shilong Sang
 
《狭义与广义相对论浅说》
《狭义与广义相对论浅说》《狭义与广义相对论浅说》
《狭义与广义相对论浅说》Shilong Sang
 
自己动手写操作系统
自己动手写操作系统自己动手写操作系统
自己动手写操作系统Shilong Sang
 
《最后期限》
《最后期限》《最后期限》
《最后期限》Shilong Sang
 
Spring基础教程
Spring基础教程Spring基础教程
Spring基础教程Shilong Sang
 

Más de Shilong Sang (16)

C:\Documents And Settings\User\桌面\Installation Guide O Oo3
C:\Documents And Settings\User\桌面\Installation Guide O Oo3C:\Documents And Settings\User\桌面\Installation Guide O Oo3
C:\Documents And Settings\User\桌面\Installation Guide O Oo3
 
7月~12月份影片概况 0703更新
7月~12月份影片概况 0703更新7月~12月份影片概况 0703更新
7月~12月份影片概况 0703更新
 
Sexix
SexixSexix
Sexix
 
groovy经典入门
groovy经典入门groovy经典入门
groovy经典入门
 
针对 Java程序员的 U M L概述
针对 Java程序员的 U M L概述针对 Java程序员的 U M L概述
针对 Java程序员的 U M L概述
 
《狭义与广义相对论浅说》
《狭义与广义相对论浅说》《狭义与广义相对论浅说》
《狭义与广义相对论浅说》
 
人月神话
人月神话人月神话
人月神话
 
自己动手写操作系统
自己动手写操作系统自己动手写操作系统
自己动手写操作系统
 
《最后期限》
《最后期限》《最后期限》
《最后期限》
 
webwork2guide
webwork2guidewebwork2guide
webwork2guide
 
Spring基础教程
Spring基础教程Spring基础教程
Spring基础教程
 
Hibernate教程
Hibernate教程Hibernate教程
Hibernate教程
 
spring_jiaocheng
spring_jiaochengspring_jiaocheng
spring_jiaocheng
 
oracle
oracleoracle
oracle
 
Spring课件
Spring课件Spring课件
Spring课件
 
groovy
groovygroovy
groovy
 

Spring课件

  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86. 三、创建切面 <bean id=“xxxTarget” class=“xxxServiceImpl” /> <bean id=“myDelegatingIntroductionInterceptor” class=“xxxMyDelegatingIntr..” /> <bean id=“xxxAdvisor” class=“DefaultIntroductionAdvisor” singleton=“false”> <constructor-arg> <ref bean=“myDelegatingIntroductionInterceptro” /> </constructor-arg> </bean> <bean id=“xxx” class=“…ProxyFatoryBean”> <property name=“proxyTargetClass”> <value>true</value> </property> <property name=“singleton”> <value>false</value> </property> <property name=“proxyInterfaces”> <value>xxxService</value> </property> <property name=“interceptorNames”> <list> <value>xxxAdvisor</value> </list> </property> <property name=“target”><ref bean=“xxxTarget”/></property> </bean>
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 120.
  • 121.
  • 122.
  • 123.
  • 124.
  • 125.
  • 126.
  • 127.
  • 128.
  • 129.
  • 130.
  • 131.
  • 132.
  • 133.
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 149. <bean id=“paymentService” class=“org.sf.remoting.rmi.RmiProxyFactoryBean”> <property name=“serviceUrl”> <value>rmi://${paymenthost}/PayService</value> </property> <property name=“serviceInterface”> <value>com…..PaymentService</value> </property> </bean> ------------------------------------------------------------------------------------ <bean id=“org………remoting.rmi.RmiServiceExporter”> <property name=“service”> <ref bean=“paymentService”> </property> <property name=“serviceName”> <value>Payment</value> </property> <property name=“serviceInterface”> <value>……PaymentService</value> </property> </bean>
  • 150.
  • 151.
  • 152.
  • 153. 访问企业级服务 class XXX extends TimerTask{ public void run(){ …… } } ------------------------------------- 调度定时器任务 <bean id=“schedualTask” class=“org……ScheduleTimerTask”> <property name=“timerTask”> <ref bean=“myTimerTask” /></property> <property name=“period”><86400000</value></property> <property name=“delay”>3600000</property> </bean>
  • 154.
  • 155.
  • 156.
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 162.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172.
  • 173.