Spring是一個開放源代碼的設計層面框架,他解決的是業(yè)務邏輯層和其他各層的松耦合問題,因此它將面向接口的編程思想貫穿整個系統(tǒng)應用。Spring是于2003 年興起的一個輕量級的Java 開發(fā)框架,由Rod Johnson創(chuàng)建。簡單來說,Spring是一個分層的JavaSE/EEfull-stack(一站式)輕量級開源框架。
Spring框架特征
輕量
從大小與開銷兩方面而言Spring都是輕量的。完整的Spring框架可以在一個大小只有1MB多的JAR文件里發(fā)布。并且Spring所需的處理開銷也是微不足道的。此外,Spring是非侵入式的:典型地,Spring應用中的對象不依賴于Spring的特定類。
控制反轉
Spring通過一種稱作控制反轉(IoC)的技術促進了低耦合。當應用了IoC,一個對象依賴的其它對象會通過被動的方式傳遞進來,而不是這個對象自己創(chuàng)建或者查找依賴對象。你可以認為IoC與JNDI相反——不是對象從容器中查找依賴,而是容器在對象初始化時不等對象請求就主動將依賴傳遞給它。
面向切面
Spring提供了面向切面編程的豐富支持,允許通過分離應用的業(yè)務邏輯與系統(tǒng)級服務(例如審計(auditing)和事務(transaction)管理)進行內(nèi)聚性的開發(fā)。應用對象只實現(xiàn)它們應該做的——完成業(yè)務邏輯——僅此而已。它們并不負責(甚至是意識)其它的系統(tǒng)級關注點,例如日志或事務支持。
容器
Spring包含并管理應用對象的配置和生命周期,在這個意義上它是一種容器,你可以配置你的每個bean如何被創(chuàng)建——基于一個可配置原型(prototype),你的bean可以創(chuàng)建一個單獨的實例或者每次需要時都生成一個新的實例——以及它們是如何相互關聯(lián)的。然而,Spring不應該被混同于傳統(tǒng)的重量級的EJB容器,它們經(jīng)常是龐大與笨重的,難以使用。
框架
Spring可以將簡單的組件配置、組合成為復雜的應用。在Spring中,應用對象被聲明式地組合,典型地是在一個XML文件里。Spring也提供了很多基礎功能(事務管理、持久化框架集成等等),將應用邏輯的開發(fā)留給了你。
MVC
Spring的作用是整合,但不僅僅限于整合,Spring 框架可以被看做是一個企業(yè)解決方案級別的框架??蛻舳税l(fā)送請求,服務器控制器(由DispatcherServlet實現(xiàn)的)完成請求的轉發(fā),控制器調用一個用于映射的類HandlerMapping,該類用于將請求映射到對應的處理器來處理請求。HandlerMapping 將請求映射到對應的處理器Controller(相當于Action)在Spring 當中如果寫一些處理器組件,一般實現(xiàn)Controller 接口,在Controller 中就可以調用一些Service 或DAO 來進行數(shù)據(jù)操作 ModelAndView 用于存放從DAO 中取出的數(shù)據(jù),還可以存放響應視圖的一些數(shù)據(jù)。 如果想將處理結果返回給用戶,那么在Spring 框架中還提供一個視圖組件ViewResolver,該組件根據(jù)Controller 返回的標示,找到對應的視圖,將響應response 返回給用戶。
所有Spring的這些特征使你能夠編寫更干凈、更可管理、并且更易于測試的代碼。它們也為Spring中的各種模塊提供了基礎支持。
spring定時器使用
1.包
spring-2.0.6.jar Spring框架的核心包
jta.jar 會用到包中的usertransaction,具體什么用此處暫時不論
quartz-1.6.0.jar 會用到CronTrigger這個類,通過表達式實現(xiàn)精確的定時
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:指向定時加載目標類中需要執(zhí)行的方法。即定時執(zhí)行smsSendService類的autoSmsTime()方法。
p:concurrent=“false”:表示不并發(fā)操作。對于相同的JobDetail,當指定多個Trigger時, 很可能第一個job完成之前,第二個job就開始了。指定concurrent設為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ā)一次。詳細參考下面附表。
評論
查看更多