Spring 入門(mén)

? Spring是一種非侵入式框架

飛侵入式

對(duì)現(xiàn)用功能沒(méi)有影響,能夠增強(qiáng)JavaBean的功能

松耦合

前面我們寫(xiě)程序的時(shí)候,都是面向接口編程,通過(guò)DaoFactory等方法實(shí)現(xiàn)松耦合。即減少模塊間的關(guān)聯(lián)性

Dao層和Service層通過(guò)DaoFacotry來(lái)實(shí)現(xiàn)松耦合,如果Service層直接new DaoBook(),那么Dao和Service層就是關(guān)聯(lián)性緊,即緊耦合。

在Spring層可以 private BookDao bookDao = DaoFacotry.getInstance().createDao("zhonggong.dao.impl.userDaoimp",OrderDao.class);? ? ?@Override? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @Permission("添加分類(lèi)")? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/*添加分類(lèi)*/public void addCategory(Category category){cateGoryDao.addCategory(category);}

Spring中提供了IOC控制反轉(zhuǎn)來(lái)松弛模塊之間的關(guān)聯(lián)度。在采用面向?qū)ο笤O(shè)計(jì)的系統(tǒng)中,所有對(duì)象通過(guò)彼此的合作,最終通過(guò)系統(tǒng)的業(yè)務(wù)邏輯,即軟件系統(tǒng)中對(duì)象之間的互相合作來(lái)形成業(yè)務(wù)邏輯。而IOC是將復(fù)雜的系統(tǒng)分解為相互合作的關(guān)系.


把各個(gè)部分封裝之后,通過(guò)IOC容器來(lái)關(guān)聯(lián)這些對(duì)象。這稱(chēng)為控制反轉(zhuǎn),又叫依賴(lài)注入

切面編程也是AOP編程,動(dòng)鐵編程也是一種切面編程

動(dòng)態(tài)代理+注解的方法給Service添加權(quán)限

Controller調(diào)用Service的時(shí)候,Service返回的是一個(gè)代理對(duì)象。

代理對(duì)象得到Controller想要的方法的時(shí)候,通過(guò)反射來(lái)看該方法有沒(méi)有注解

如果有注解,就判斷該用戶(hù)是否有權(quán)限來(lái)調(diào)用改方法,沒(méi)有權(quán)限則拋出給controller,controlller得到?jīng)]有權(quán)限異常就可以對(duì)用戶(hù)進(jìn)行提示

AOP:在執(zhí)行某些代碼前,執(zhí)行另外的代碼

struct2的攔截器也是面向切面攔截

action:多個(gè),訪問(wèn)時(shí)創(chuàng)建,依賴(lài)service

service:一個(gè),不需要維護(hù)公共變量,啟動(dòng)時(shí)創(chuàng)建,依賴(lài)dao

dao:一個(gè),啟動(dòng)時(shí)創(chuàng)建

注釋?zhuān)篅Controller 數(shù)據(jù)經(jīng)過(guò)業(yè)務(wù)處理邏輯后封裝成一個(gè)model,然后再返回給View進(jìn)行展示

在SpringMVC中提供了一個(gè)簡(jiǎn)便的定義Controller的方法,你無(wú)需繼承特定的類(lèi)或者接口,只需要使用Controller 標(biāo)記一個(gè)controller?

@RequestMapping 注解,

作用域@Scope prototype request session global session

自動(dòng)裝配@Autowired

@Component:標(biāo)準(zhǔn)一個(gè)普通的spring Bean類(lèi)。

@Controller:標(biāo)注一個(gè)控制器組件類(lèi)。

@Service:標(biāo)注一個(gè)業(yè)務(wù)邏輯組件類(lèi)。

@Repository:標(biāo)注一個(gè)DAO組件類(lèi)。

@Runwith()是一個(gè)運(yùn)行器,括號(hào)里跟Unit4.class Suite.class

@ContextConfiguration Spring整合多個(gè)Utnit4測(cè)試的時(shí)候,使用注解引入多個(gè)配置文件

單個(gè)文件:

@ContextC2? ? ? ? ? ? onfigruation(Locations="classpath:applicationContext.xml)

@ContextConfiguration(locations = { "classpath:spring1.xml", "classpath:spring2.xml" })?

@Configuration把一個(gè)類(lèi)作為一個(gè)IoC容器,它的某個(gè)方法頭上如果注冊(cè)了@Bean,就會(huì)作為這個(gè)Spring容器中的Bean。

@Scope注解 作用域

@Lazy(true) 表示延遲初始化

@Service用于標(biāo)注業(yè)務(wù)層組件、?

@Controller用于標(biāo)注控制層組件(如struts中的action)

@Repository用于標(biāo)注數(shù)據(jù)訪問(wèn)組件,即DAO組件。

@Component泛指組件,當(dāng)組件不好歸類(lèi)的時(shí)候,我們可以使用這個(gè)注解進(jìn)行標(biāo)注。

@Scope用于指定scope作用域的(用在類(lèi)上)

@PostConstruct用于指定初始化方法(用在方法上)

@PreDestory用于指定銷(xiāo)毀方法(用在方法上)

@DependsOn:定義Bean初始化及銷(xiāo)毀時(shí)的順序

@Primary:自動(dòng)裝配時(shí)當(dāng)出現(xiàn)多個(gè)Bean候選者時(shí),被注解為@Primary的Bean將作為首選者,否則將拋出異常

@Autowired 默認(rèn)按類(lèi)型裝配,如果我們想使用按名稱(chēng)裝配,可以結(jié)合@Qualifier注解一起使用。如下:

@Autowired @Qualifier("personDaoBean") 存在多個(gè)實(shí)例配合使用

@Resource默認(rèn)按名稱(chēng)裝配,當(dāng)找不到與名稱(chēng)匹配的bean才會(huì)按類(lèi)型裝配。

@PostConstruct 初始化注解

@PreDestroy 摧毀注解 默認(rèn) 單例? 啟動(dòng)就加載

@Async異步方法調(diào)用

bean.xml:<context:compnent-scan base-package="com.kn.beanScope">

@Component//標(biāo)注這是一個(gè)普通的BEAN文件

public void sout(){

? ? ? ? ? ? ?System.out.println("????THIS is OH Data!");

}


BeanScope.java,中scope設(shè)定定義域,每次新建自身實(shí)例

@Component

@Scope("prototype")

public class BeanScope(){

? ? ? @Autowired

? ? ? private OH oh;

? ? ? private String beanname;

}

UserAxeTest

?ApplicationContext ctx = new ClassPathXmlApplication("bean_zj.xml");

BeanScope beanscope = ctx.getBean("beanscope",BeanScope.class);

beanScope.init();

BeanScope.beanscope1=ctx.getBean("beanScope",BeanScope.class);

獲取兩次 beanScope 然后 第一次先調(diào)用init 再say,第二次 直接say

Spring的Datasource多循環(huán)問(wèn)題:1、準(zhǔn)備依賴(lài) 2.token從以前的數(shù)據(jù)庫(kù)移除了,移到了redis端

maven repository:maven中央倉(cāng)庫(kù)

? 鏈接打開(kāi)后如下:


? 那么怎么使用這個(gè)網(wǎng)站呢?

? 舉例,我需要寫(xiě)一個(gè)java發(fā)送郵件的功能,需要java.mail的jar包。那么我直接在搜索框中輸入:mail,搜索結(jié)果如下:

? 如圖,我們看到了前兩個(gè)選項(xiàng):JavaMail API JAR和JavaMail API(compat)。

? 按照慣例選擇usages最多的那個(gè),也就是javaMail API(compat),點(diǎn)擊打開(kāi)。

? 然后在下面的version里面選一個(gè),比如1.4.7。

https://mvnrepository.com/

? 將下面的xml代碼復(fù)制到你的pom.xml中即可。

Spring Web Spring對(duì)web模塊的支持。

? ? ? ? ? ? ? ? 可以與struts整合,讓struts的action創(chuàng)建交給spring

? ? ? ? ? ? ? ? spring mvc模式

Spring DAO Spring 對(duì)jdbc操作的支持 【JdbcTemplate模板工具類(lèi)】

Spring ORM spring對(duì)orm的支持:

既可以與hibernate整合,【session】

也可以使用spring的對(duì)hibernate操作的封裝

Spring AOP 切面編程

SpringEE spring 對(duì)javaEE其他模塊的支持

依賴(lài)注入:甲方開(kāi)放接口時(shí),乙方可以傳遞進(jìn)來(lái)控制反轉(zhuǎn),

甲乙雙方不相互依賴(lài),交易活動(dòng)時(shí)不依賴(lài)甲乙任何一方,整個(gè)活動(dòng)不依賴(lài)甲乙任何一方,整個(gè)活動(dòng)由第三方解決

單例的好處:效率高,不浪費(fèi)空間。方便單元測(cè)試,方便切換mock組件,方便于AOP操作,對(duì)于操作是透明的,統(tǒng)一配置,便于修改

Spring可以分成六大模塊:spring core spring的核心,IOC:容器,解決對(duì)象創(chuàng)建以及依賴(lài)問(wèn)題

spring web spring對(duì)web模塊的支持,可以和struct融合,把struct的action交給Spring來(lái)創(chuàng)建

spring MVC模式,spring DAO spring對(duì)orm的支持,也可以和hibenate整合,也可以使用spring對(duì)hibernate操作的封裝

Spring AOP的切面操作

SpringEE spring對(duì)JAVAEE其他模塊的支持:Core模塊快速入門(mén)

引入jar包:

本博文主要是core模塊的內(nèi)容,涉及到Spring core的開(kāi)發(fā)jar包有五個(gè)

commons-logging-1.1.3.jar 日志

spring-beans-3.2.5.RELEASE.jar bean節(jié)點(diǎn)

spring-context-3.2.5.RELEASE.jar spring上下文節(jié)點(diǎn)

spring-core-3.2.5.RELEASE.jar spring核心功能

spring-expression-3.2.5.RELEASE.jar spring表達(dá)式相關(guān)表

Spring的核心配置文件是ApplicationContext.xml或者叫bean.xml,

core容器是ICO容器,能解決對(duì)象創(chuàng)建之間的依賴(lài)關(guān)系,IOC細(xì)節(jié)

得到Spring容器對(duì)象,IOC容器.000000

Spring容器不單單只是一個(gè),可以歸類(lèi)為兩種類(lèi)型

Bean工廠,BeanFactory ( 功能簡(jiǎn)單)\

應(yīng)用上下文,ApplicationContext(功能強(qiáng)大,一般我們使用這個(gè))

通過(guò)Resource獲得BeanFactory

加載Spring配置文件來(lái)創(chuàng)建IOC容器

類(lèi)路徑下XML獲取ApplicationContext

直接通過(guò)ClassPathApplicationContext對(duì)象來(lái)獲取

//得到IOC容器對(duì)象,ApplicationContext ac

=newClassPathXmlApplicationContext("applicationContext.xml");

System.out.println(ac;)

Spring中總可以通過(guò)三種方法來(lái)配置對(duì)象

使用XML來(lái)配置,使用注解來(lái)配置,使用JavaConfig來(lái)配置


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容