王龍軍
(成都工業(yè)學院,四川 成都 611730)
隨著移動互聯(lián)網和人工智能時代的到來,知識更新日新月異,社會大眾對知識特別是專業(yè)知識的學習的需求越來越高,高校圖書館的資源能滿足社會大眾對知識的需要。高校圖書館同樣作為我國公共文化服務體系中的一部分,在為高校人才培養(yǎng)與科學研究提供服務的同時也具有社會服務的職能[1]。高校圖書館開展面向社會讀者的服務不但可以提高圖書館紙質資源和電子資源的利用率,而且能夠促進服務高校教學科研和服務社會的雙重發(fā)展,這樣既可以充分利用高校圖書館的專業(yè)紙質和電子資源的專業(yè)優(yōu)勢,又可以增強圖書館的可持續(xù)發(fā)展和增強館員的社會服務意識。因此,高校圖書館應在滿足服務科研及教學需要后可以向社會讀者開放,怎么樣服務社會讀者,傳統(tǒng)的做法是為社會讀者辦理校外讀者卡,隨著時代的發(fā)展傳統(tǒng)的做法越來越跟不上時代的發(fā)展,高校圖書館開發(fā)校外讀者注冊系統(tǒng)真是迎合社會讀者和時代的需要。
Spring是分層的Java SE/EE應用一站式的輕量級開源框架[2],Spring框架的核心是“控制反轉(IoC)和面向切面編程(AOP)”,Spring的主要優(yōu)勢在于分層架構的解決方案,在表現(xiàn)層可以與Spring MVC這樣的MVC框架進行整合,在業(yè)務邏輯層可以提供通用的管理事務和日志功能,在持久層可以與MyBatis等框架整合,Spring框架可以應用于Java EE開發(fā)的所有分層并提供解決方案,但是Spring的偉大之處在于可以與許多行業(yè)中優(yōu)秀的框架進行完美整合,Spring的目標不是取代現(xiàn)有的框架,因為Spring的開發(fā)團隊認識到他們不能在所有方面都能做到最好,但Spring能夠整合行業(yè)中最優(yōu)秀的框架。
Spring的配置方式非常重要,Spring容器會自動完成對Bean對象(Spring Bean是被實例的,組裝的及被Spring容器管理的Java對象)的實例化,這樣就實現(xiàn)了Java對象之間解耦,避免硬編碼造成程序之間的過度耦合。Spring在構建Java EE時是一個黏合劑,Spring依靠IoC容器進行基于XML的配置是Spring早期主要的方式,隨著項目越來越多,基于XML的配置顯得越來越臃腫,后來出現(xiàn)了基于注解的配置和基于Java類的配置,主要目的還是簡化配置,實現(xiàn)更加靈活多樣的配置方式,多種配置方式相結合。
Spring3種配置方式如下:①基于XML的配置。從Spring 1.x時開始,Spring主要采用XML配置Spring Bean,用XML配置文件來管理Bean之間的關系。②基于注解的配置。由于項目越來越大,過多地使用基于XML的配置會變得越來越臃腫,所以在Spring 2.x時代,由于JDK 1.5以后就開始提供對注解的支持,Spring此時提供了Bean的定義信息可以通過在Bean的實現(xiàn)類上標注注解來實現(xiàn),這樣會大大減少了配置量。③基于Java類的配置。Spring 3.0以后,提供了Java配置的能力,Spring 4.x和Spring Boot都推薦使用Java配置。其中基于注解的配置和基于Java類的配置區(qū)別:需要在Serivce層,DAO層的時候,需要在類上進行注解,就可獲得spring的依賴注入;如果使用java配置的方式,那么就不需要在類上寫注解了,直接在配置類里面進行聲明就可以了。
Spring Boot更是在Spring配置上更進一步,它采用“約定優(yōu)于配置”的原則,實現(xiàn)零配置和自動化配置,簡化了Spring配置。
Kotlin是基于JVM的編程語言,由JetBrains公司研發(fā)和維護,可以將它編譯成Java字節(jié)碼,也可以將它編譯成JavaScript,方便在沒有JVM的設備上運行[3]。Koltin與Java[4]語言完全兼容,而且Kotlin代碼比Java代碼更具有現(xiàn)代性,比如Kotlin支持函數式編程、委托、擴展、對象表達式等。Kotlin應用范圍非常廣泛,Kotlin可用于網頁前端開發(fā),代替JavaScript這一用得比較多的前端開發(fā)語言,Kotlin也可以用于服務器端開發(fā),比如和Struts、Spring MVC、MyBatis等框架一起做后端開發(fā),Kotlin可以利用Java現(xiàn)有的各種框架,Kotlin可以和Java進行混合開發(fā),Kotlin被Google推薦為Android開發(fā)的官方語言,這是Kotlin開發(fā)用來進行Android開發(fā),Kotlin在開發(fā)Android時可以調用Java現(xiàn)有的比較成熟的Java庫,還可以調用Kotlin自己的擴展庫。
Kotlin來源于Java語言,同時Kotlin對Java進行大規(guī)模的改良,Kotlin語法類似于JavaScript和Java,Kotlin和Swift一樣具備現(xiàn)代編程語言很多特征,Kotlin經常被認為是一門類似于Scala的開發(fā)語言,兩種語言都來源于對Java語言的改良,Kotin從Scala語言借鑒了很多優(yōu)秀的特性,這是每種語言發(fā)展的必然趨勢,語言之間相互學習、相互競爭、相互促進的良性循環(huán)。Scala熱衷于編程語言的研究和探索,Scala包含了很多理想的語言特性,而Kotlin簡化了Scala的繁雜的語言特性,Kotlin在Java的基礎上進行語言特性的改良,比如可控類型、擴展函數、數據類等,Kotlin放棄了Static關鍵字,引入Object,當然Kotlin無法想Java那樣編寫靜態(tài)屬性、靜態(tài)方法,Kotlin實現(xiàn)了類型推導,這給程序員帶來很大的方便。Kotlin還引入了很多新類,比如Sealed Classes、Data Classes等,Kotlin注重開發(fā)工程的實用性,總之,Kotlin是一門開放、現(xiàn)代、強大的編程語言。
本設計基于Spring與Kotlin的校外讀者注冊系統(tǒng),該系統(tǒng)采用瀏覽器/服務器(B/S)模式,該系統(tǒng)總體上分為兩部分:系統(tǒng)前臺和系統(tǒng)后臺,系統(tǒng)前臺主要功能是校外讀者通過注冊成為圖書館的校外用戶,圖書館是面向校外讀者開放,注冊為校外讀者用戶后就可以擁有一張電子借閱卡,該借閱卡可以為微信進行綁定。該用戶就可以擁有圖書館借還紙質圖書、使用圖書館電子資源等的權限;系統(tǒng)后臺是圖書館管理員通過后臺權限認證后管理校外讀者的記錄,包括審核注冊用戶、修改用戶錯誤的記錄信息、刪除非法注冊用戶。校外讀者注冊系統(tǒng)總體結構,如圖1所示。
圖1 校外讀者注冊系統(tǒng)總體結構
DAO模式是標準的Java EE設計模式之一,DAO設計模式把底層的數據訪問邏輯和高層的商務邏輯分開,DAO模式的核心思想是DAO組件封裝了數據庫的增刪改查等原子操作,所有的數據庫訪問是通過DAO組件完成,業(yè)務邏輯組件依賴DAO組件提供的原子操作,Java EE可以分為以下3層:表現(xiàn)層,業(yè)務邏輯層,數據持久層。Spring提供了一系列的抽象類,這些抽象類將被作為應用中DAO組件可以通過這些抽象類,Spring簡化了DAO的開發(fā)步驟,能夠以一致的訪問方式使用數據庫訪問技術,無論底層采用JDBC、JDO,還是Hibernate、MyBatis等,Spring系統(tǒng)應用都采用一致的編程模型,Spring提供的多種數據庫訪問技術的DAO支持,包括Hibernate、JDO、TopLink、MyBatis、OJB、Spring Data JPA等。
本系統(tǒng)采用DAO模式來完成整個框架的構建,本系統(tǒng)主要采用Spring和Hibernate,其中Hibernate用于持久層,主要完成對校外讀者用戶表的增刪改查等數據表操作,Spring主要用來整合各層,在表現(xiàn)層提供了與Spring MVC框架的整合,在持久層整合Hibernate框架,在業(yè)務邏輯層主要使用AOP實現(xiàn)管理事務,Spring是一個“一站式”的整合框架。在這里簡單介紹一下Hibernate,Hibernate是一個開放源代碼的對象關系映射框架,Hibernate對JDBC進行了非常輕量級的對象封裝,它將簡單的Java對象(POJO)與數據庫中數據表建立映射關系,跟MyBatis是半自動框架不同,Hibernate是一個全自動的ORM框架,Hibernate可以自動生成SQL語句,自動執(zhí)行,使得Java程序員可以按照對象編程思維來操縱數據庫。
筆者重點討論Spring與Hibernate的整合,其基本思想是:讓Spring的IoC容器管理Hibernate的SessionFactory,Hibernate使用Spring的事務管理,具體就是Spring配置數據源DataSource,Hibernate的sessionFactory在Spring的配置文件中定義,當SessionFactory被配置注入后,然后在應用程序中通過IoC獲取配置注入的SessionFactory的實例Bean,通過HibernateTemplate類實現(xiàn)對用戶表的增刪改查操作。系統(tǒng)部分代碼如下:
class UserDaoImpl : UserDao {
@Autowired
private val hibernateTemplate: Hibernate Template? = null
fun findById(id: Int?): User {
return this.hibernateTemplate.get(User::class.java, id)}
fun findAll(): List
return this.hibernateTemplate.find("from User")}
fun save(user: User) {
this.hibernateTemplate.save(user) }
fun update(user: User) {
this.hibernateTemplate.update(user) }
fun delete(user: User) {
this.hibernateTemplate.delete(user)}
}
筆者采用Spring與Kotlin技術實現(xiàn)了校外讀者注冊系統(tǒng),該系統(tǒng)改變了傳統(tǒng)的校外讀者現(xiàn)場辦理校外讀者卡的方式,系統(tǒng)實現(xiàn)了用戶不用到現(xiàn)場、直接在線就可以注冊辦理校外讀者電子借閱卡,該借閱卡可以和微信綁定,能夠實現(xiàn)校外讀者使用圖書館紙質資源和電子資源,系統(tǒng)投入使用后能大大提高圖書館在管理校外讀者的效率,并進一步提升圖書館的自動化水平。