Spring是一個開放源代碼的設計層面框架,他解決的是業務邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個系統應用。Spring是于2003 年興起的一個輕量級的Java 開發框架,由Rod Johnson創建。簡單來說,Spring是一個分層的JavaSE/EEfull-stack(一站式)輕量級開源框架。
Spring框架特征
輕量
從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴于Spring的特定類。
控制反轉
Spring通過一種稱作控制反轉(IoC)的技術促進了低耦合。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。
面向切面
Spring提供了面向切面編程的豐富支持,允許通過分離應用的業務邏輯與系統級服務(例如審計(auditing)和事務(transaction)管理)進行內聚性的開發。應用對象只實現它們應該做的——完成業務邏輯——僅此而已。它們并不負責(甚至是意識)其它的系統級關注點,例如日志或事務支持。
容器
Spring包含并管理應用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創建——基于一個可配置原型(prototype),你的bean可以創建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關聯的。然而,Spring不應該被混同于傳統的重量級的EJB容器,它們經常是龐大與笨重的,難以使用。
框架
Spring可以將簡單的組件配置、組合成為復雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發留給了你。
MVC
Spring的作用是整合,但不僅僅限于整合,Spring 框架可以被看做是一個企業解決方案級別的框架。客戶端發送請求,服務器控制器(由DispatcherServlet實現的)完成請求的轉發,控制器調用一個用于映射的類HandlerMapping,該類用于將請求映射到對應的處理器來處理請求。HandlerMapping 將請求映射到對應的處理器Controller(相當于Action)在Spring 當中如果寫一些處理器組件,一般實現Controller 接口,在Controller 中就可以調用一些Service 或DAO 來進行數據操作 ModelAndView 用于存放從DAO 中取出的數據,還可以存放響應視圖的一些數據。 如果想將處理結果返回給用戶,那么在Spring 框架中還提供一個視圖組件ViewResolver,該組件根據Controller 返回的標示,找到對應的視圖,將響應response 返回給用戶。
所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測試的代碼。它們也為Spring中的各種模塊提供了基礎支持。
spring定時器使用
1.包
spring-2.0.6.jar Spring框架的核心包
jta.jar 會用到包中的usertransaction,具體什么用此處暫時不論
quartz-1.6.0.jar 會用到CronTrigger這個類,通過表達式實現精確的定時
commons-logging-1.1.1.jar 日志管理包
commons-collections-3.2.1.jar 集合工具包
2.首先是配置你要定時加載的目標類
第一種方法:xml方式,例如:
<?xml version=“1.0” encoding=“UTF-8”?>
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
xmlns:p=“http://www.springframework.org/schema/p”
xsi:schemaLocation=“http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd”>
< P>
第二種方法:基于注解的方式。例如:@Service(smsSendService) 注:此注解用于Service層
3.配置你的定時器詳情
p:targetObject-ref=“smsSendService” p:targetMethod=“autoSmsTime” p:concurrent=“false”/>
解釋:
p:targetObject-ref:指向你要定時加載的目標類。
p:targetMethod:指向定時加載目標類中需要執行的方法。即定時執行smsSendService類的autoSmsTime()方法。
p:concurrent=“false”:表示不并發操作。對于相同的JobDetail,當指定多個Trigger時, 很可能第一個job完成之前,第二個job就開始了。指定concurrent設為false,多個job不會并發運行,第二個job將不會在第一個job完成之前開始。
注意:smsSendService類的autoSmsTime()方法沒有參數,如果smsSendService有兩個方法autoSmsTime()和autoSmsTime(String argument),則spring只會去執行無參的autoSmsTime()。例如:
public void autoSmsTime(){
System.out.println(“無參。。。。。。”);
}
4.配置定時器時間間隔
<!-- 定義時間間隔觸發器 每隔10秒執行一次-->
p:jobDetail-ref=“smsSendServiceJob” p:cronExpression=“*/10 * * * * ?”/>
解釋:
p:cronExpression:指定定時器什么時候觸發。上面是每10秒觸發一次。詳細參考下面附表。
5.配置啟動定時器
< value=““applicationContext””>
< P>
< bean=““smsSendServiceTrigger””>
<>
解釋:
triggers:通過再添加其他的ref元素可在list中放置多個觸發器。
6.在web中配置配置文件地址和類加載監聽器
< P>
contextConfigLocation< P param-name><>
classpath:applicationContext.xml< P param-value><>
<>
< P>
org.springframework.web.context.ContextLoaderListener< P listener-class><>
<>
解釋:
ContextLoader可以由 ContextLoaderListener和ContextLoaderServlet生成。如果查看ContextLoaderServlet的 API,可以看到它也關聯了ContextLoader這個類而且它實現了HttpServlet這個接口。
ContextLoader創建的是 XmlWebApplicationContext這樣一個類,它實現的接口是 WebApplicationContext->ConfigurableWebApplicationContext->ApplicationContext->BeanFactory 這樣一來spring中的所有bean都由這個類來創建
講如何部署applicationContext的xml文件。
如果在web.xml中不寫任何參數配置信息,默認的路徑是/WEB-INF/applicationContext.xml,在WEB-INF目錄下創建的xml文件的名稱必須是applicationContext.xml;
如果是要自定義文件名可以在web.xml里加入contextConfigLocation這個context參數:
< P>
contextConfigLocation< P param-name><>
< P>
/WEB-INF/classes/applicationContext-*.xml
<>
<>
在 P 等文件,都會一同被載入。< base.xml,applicationContext-action.xml,applicationContext-ibatis-dao.xml applicationContext-*.xml采用通配符,比如這那個目錄下有applicationContext-ibatis- param-value>里指定相應的xml文件名,如果有多個xml文件,可以寫在一起并一“,”號分隔。上面的 <>
由此可見applicationContext.xml的文件位置就可以有兩種默認實現:
第一種:直接將之放到/WEB-INF下,之在web.xml中聲明一個listener;
第二種:將之放到classpath下,但是此時要在web.xml中加入,用它來指明你的 P 整合spring的官方給出的檔案,寫成:< applicationContext.xml的位置以供web容器來加載。按照Struts2>
< P>
contextConfigLocation< P param-name><>
P param-value>< applicationContext-*.xml,classpath*:applicationContext-*.xml< WEB-INF>
<>
spring定時器參數配置
“0 0 12 * * ?” 每天中午12點觸發
“0 15 10 ? * *” 每天上午10:15觸發
“0 15 10 * * ?” 每天上午10:15觸發
“0 15 10 * * ? *” 每天上午10:15觸發
“0 15 10 * * ? 2005” 2005年的每天上午10:15觸發
“0 * 14 * * ?” 在每天下午2點到下午2:59期間的每1分鐘觸發
“0 0/5 14 * * ?” 在每天下午2點到下午2:55期間的每5分鐘觸發
“0 0/5 14,18 * * ?” 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鐘觸發
“0 0-5 14 * * ?” 在每天下午2點到下午2:05期間的每1分鐘觸發
“0 10,44 14 ? 3 WED” 每年三月的星期三的下午2:10和2:44觸發
“0 15 10 ? * MON-FRI” 周一至周五的上午10:15觸發
“0 15 10 15 * ?” 每月15日上午10:15觸發
“0 15 10 L * ?” 每月最后一日的上午10:15觸發
“0 15 10 ? * 6L” 每月的最后一個星期五上午10:15觸發
“0 15 10 ? * 6L 2002-2005” 2002年至2005年的每月的最后一個星期五上午10:15觸發
“0 15 10 ? * 6#3” 每月的第三個星期五上午10:15觸發
每隔5秒執行一次:*/5 * * * * ?
每隔1分鐘執行一次:0 */1 * * * ?
每天23點執行一次:0 0 23 * * ?
每天凌晨1點執行一次:0 0 1 * * ?
每月1號凌晨1點執行一次:0 0 1 1 * ?
每月最后一天23點執行一次:0 0 23 L * ?
每周星期天凌晨1點實行一次:0 0 1 ? * L
評論