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