柚子快報(bào)邀請(qǐng)碼778899分享:java 后端 Spring
柚子快報(bào)邀請(qǐng)碼778899分享:java 后端 Spring
Spring
Spring 是一個(gè)開源的,控制反轉(zhuǎn)( IOC )的,面象切面( AOP )的容器框架.
使用Spring 的好處
降低組件之間的耦合度,實(shí)現(xiàn)軟件各層之間的解耦可以使用容器提供的眾多服務(wù),如:事務(wù)管理服務(wù)、消息服務(wù)等等。當(dāng)我們使用容器管理事務(wù)時(shí),開發(fā)人員就不再需要手工控制事務(wù).也不需處理復(fù)雜的事務(wù)傳播容器支持單例模式,開發(fā)人員不再需要自己編寫實(shí)現(xiàn)代碼容器提供了AOP技術(shù),利用它很容易實(shí)現(xiàn)如權(quán)限攔截、運(yùn)行期監(jiān)控等功能容器提供的眾多輔作類,使用這些類能夠加快應(yīng)用的開發(fā),如: JdbcTemplate、 HibernateTemplateSpring對(duì)于主流的應(yīng)用框架提供了集成支持,如:集成 Hibernate、JPA、Struts 等,這樣更便于應(yīng)用的開發(fā)
Spring 負(fù)責(zé)管理容器中所有的組件, 這些組件統(tǒng)稱為 Bean , 在Spring 的概念里,一切都是Bean,其實(shí)Spring就是面向Bean的編程(BOP,Bean Oriented Programming )
spring 中的重要概念
IOC (Inversion of control) 控制反轉(zhuǎn) ? 應(yīng)用本身不負(fù)責(zé)依賴對(duì)象的創(chuàng)建,而是把它們的創(chuàng)建控制權(quán)交給外容器, 這樣,對(duì)象創(chuàng)建的控制權(quán)就從應(yīng)用轉(zhuǎn)到了外部容器,控制權(quán)的轉(zhuǎn)移,稱為控制反轉(zhuǎn) DI ( Dependency Injection )依賴注入 ? 在程序運(yùn)行期, 由外部容器,將依賴對(duì)象傳給應(yīng)用的過程 AOP ( Aspect Oriented Programming) 面象切面編程 ? AOP是OOP的延續(xù),利用AOP可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離,從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時(shí)提高了開發(fā)的效率。
四種注入bean的方式
setter方法注入構(gòu)造方法注入靜態(tài)工廠注入實(shí)例工廠注入
bean的作用域
bean 的 生命周期
AOP 編程
Spring切面可以應(yīng)用5種類型的通知:
前置通知(Before):在目標(biāo)方法被調(diào)用之前調(diào)用通知功能;后置通知(After):在目標(biāo)方法完成之后調(diào)用通知,此時(shí)不會(huì)關(guān)心方法的輸出是什么;返回通知(After-returning):在目標(biāo)方法成功執(zhí)行之后調(diào)用通知;異常通知(After-throwing):在目標(biāo)方法拋出異常后調(diào)用通知;環(huán)繞通知(Around):通知包裹了被通知的方法,在被通知的方法調(diào)用之前和調(diào)用之后執(zhí)行 自定義的行為。
@Component @Aspect
public class MyAspect {
//例 得到方法相關(guān)的信息
@Before("anyMethod()")
public void beforeMethod() {
System.out.println("前置通知觸發(fā)了");
}
@AfterReturning("anyMethod()")
public void finallyMethod() {
System.out.println("最終通知觸發(fā)了");
}
@AfterThrowing("anyMethod()")
public void exceptionMethod() {
System.out.println("例外通知觸發(fā)了");
}
@After("anyMethod()")
public void afterMethod() {
System.out.println("后置通知觸發(fā)了");
}
@Pointcut("execution(* com.dao.impl.*.*(..))")
private void anyMethod() {}
}
spring進(jìn)行事務(wù)管理
在Spring中,進(jìn)行事務(wù)管理,主要有兩種方式
注解方式xml配置的方式
注解方式
步驟一、在spring配置文件中引入tx:命名空間
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> 步驟二、具有@Transactional 注解的bean自動(dòng)配置為聲明式事務(wù)支持 步驟三、在接口或類的聲明處 ,寫一個(gè)@Transactional 這個(gè)注解可以加在方法上,或加在類上,如果加在類上,則表示類中的所有方法都開啟這樣的事務(wù)管理 //當(dāng)標(biāo)于類前時(shí), 標(biāo)示類中所有方法都進(jìn)行事物處理 @Transactional public class TestServiceBean implements TestService {} //當(dāng)類中某些方法不需要事物時(shí): @Transactional(propagation = Propagation.NOT_SUPPORTED) public List return null; } 事物傳播行為介紹 @Transactional(propagation=Propagation.REQUIRED) (required 請(qǐng)求) 如果有事務(wù), 那么加入事務(wù), 沒有的話新建一個(gè)(默認(rèn)情況下) @Transactional(propagation=Propagation.NOT_SUPPORTED) (supported 支持的) 容器不為這個(gè)方法開啟事務(wù) @Transactional(propagation=Propagation.REQUIRES_NEW) (requires_new) 不管是否存在事務(wù),都創(chuàng)建一個(gè)新的事務(wù),原來的掛起,新的執(zhí)行完畢,繼續(xù)執(zhí)行老的事務(wù) @Transactional(propagation=Propagation.MANDATORY) //(mandatory,強(qiáng)制的,命令的,受委托的) 必須在一個(gè)已有的事務(wù)中執(zhí)行,否則拋出異常 @Transactional(propagation=Propagation.NEVER) 必須在一個(gè)沒有的事務(wù)中執(zhí)行,否則拋出異常(與Propagation.MANDATORY相反) @Transactional(propagation=Propagation.SUPPORTS) 如果其他bean調(diào)用這個(gè)方法,在其他bean中聲明事務(wù),那就用事務(wù).如果其他bean沒有聲明事務(wù),那就不用事務(wù). XML方式 柚子快報(bào)邀請(qǐng)碼778899分享:java 后端 Spring 推薦鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。