摘要:框架最初是由編寫的,并且年月首次在許可下發(fā)布。在一個(gè)方法執(zhí)行之后,只有在方法退出拋出異常時(shí),才能執(zhí)行通知在建議方法調(diào)用之前和之后,執(zhí)行通知。方法執(zhí)行之后,不考慮其結(jié)果,執(zhí)行通知。
導(dǎo)讀:
在上篇文章的結(jié)尾提到了Spring Boot 提供了一系列的框架整合(Starter POMs)幫助我們提升開發(fā)效率,但是這并不意味著我們不需要學(xué)習(xí)這些框架,反而更需要去學(xué)習(xí),通過(guò)學(xué)習(xí)這些框架可以使我們更好的去解決生產(chǎn)中遇到的問(wèn)題。 在這篇文章中主要以Spring Framework作為起步點(diǎn),帶你快速了解Spring Framework (下面將以 Spring 代指 Spring Framework)。
Spring Framework: Spring 是什么?簡(jiǎn)要介紹:
Spring 框架是一個(gè)開源的 Java 平臺(tái),它為容易而快速的開發(fā)出耐用的 Java 應(yīng)用程序提供了全面的基礎(chǔ)設(shè)施。
Spring 框架最初是由 Rod Johnson 編寫的,并且 2003 年 6 月首次在 Apache 2.0 許可下發(fā)布。
詳細(xì)介紹:
Spring Framework 是一個(gè)開源的Java/Java EE全功能棧(full-stack)的應(yīng)用程序框架,以Apache許可證形式發(fā)布,也有.NET平臺(tái)上的移植版本。該框架基于 Expert One-on-One Java EE Design and Development(ISBN 0-7645-4385-7)一書中的代碼,最初由Rod Johnson和Juergen Hoeller等開發(fā)。Spring Framework提供了一個(gè)簡(jiǎn)易的開發(fā)方式,這種開發(fā)方式,將避免那些可能致使底層代碼變得繁雜混亂的大量的屬性文件和幫助類。
引自:維基百科
Spring 有什么好處?Spring 框架提供約 20 個(gè)模塊,可以根據(jù)應(yīng)用程序的要求來(lái)使用,從而提高開發(fā)效率。
查看更多介紹:
Spring IoC有什么好處呢? 知乎
spring 好處與優(yōu)點(diǎn)
Spring的作用到底體現(xiàn)在哪里
快速一覽:
Spring 的體系結(jié)構(gòu):體系結(jié)構(gòu)介紹描述
快速上手Spring:
經(jīng)濟(jì)學(xué)中有個(gè)概念叫做2 8 定理,在我們這篇文章中我們也以這個(gè)定理作為指導(dǎo)思想,列舉Spring中最常用的20%的配置與注解。
在Spring中最核心的兩個(gè)概念是IOC 與 AOP,我們將分別以它兩個(gè)為例列舉出常用的注解,在開始之前我們先了解一下Spring IOC 的概念 、 AOP的概念,了解完這些概念之后我們開始以一個(gè)簡(jiǎn)單的Hello World 為例:
要求:
將Spring導(dǎo)入項(xiàng)目
1.Spring 上下文的配置類:
//自定義的bean類型 public class Hello { private String hello; /**省略get/set**/ } //配置上下文 @Configuration public class Configer { //注冊(cè)Hello 示例 @Bean public Hello getHello(){ return new Hello(); } }
2.獲取Spring 上下文中的Bean:
public class MainApp { public static void main(String[] args) { //創(chuàng)建Spring 上下文對(duì)象 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Configer.class); //獲取Spring 上下文對(duì)象中的 Hello的示例 Hello hello = applicationContext.getBean(Hello .class); hello.setHello("Hello World"); System.out.println(hello.getHello()); } }
控制臺(tái)信息:
Hello World
一.Spring IOC 中常用的注解:
注冊(cè)上下文
屬性基本注解:
@Bean :用于表示創(chuàng)建的bean示例
類級(jí)別注解:
@Configuration 配置上下文
@Service用于標(biāo)注業(yè)務(wù)層組件、
@Controller用于標(biāo)注控制層組件(如struts中的action)、
@Repository用于標(biāo)注數(shù)據(jù)訪問(wèn)組件,即DAO組件。
@Component泛指組件,當(dāng)組件不好歸類的時(shí)候,我們可以使用這個(gè)注解進(jìn)行標(biāo)注。 這四種注解僅僅是角色不同,但本質(zhì)都一樣。
用于自動(dòng)裝配
字段及方法注解 :
@Autowired 注解可以應(yīng)用到 bean 屬性的 setter 方法,非 setter 方法,構(gòu)造函數(shù)和屬性。
@Resource 注解可以應(yīng)用到 bean 屬性的 setter 方法。
二.AOP中常用的注解:
為列方便理解舉一個(gè)簡(jiǎn)單的例子:
@Component @Aspect public class MyAdvice { @Pointcut("execution(* cn.sunxyz.spring.aop.*Service.*(..))") // expression private void businessService() { } // 在一個(gè)方法執(zhí)行之前,執(zhí)行通知。 @Before("businessService()") public void doBeforeTask() { System.out.println("doBeforeTask."); } // 在一個(gè)方法執(zhí)行之后,不考慮其結(jié)果,執(zhí)行通知。 @After("businessService()") public void doAfterTask() { System.out.println("doAfterTask."); } // 在一個(gè)方法執(zhí)行之后,只有在方法成功完成時(shí),才能執(zhí)行通知。 @AfterReturning(pointcut = "businessService()", returning = "retVal") public void doAfterReturnningTask(JoinPoint joinPoint, Object retVal) { String methodName = joinPoint.getSignature().getName(); System.out.println("doAfterReturnningTask " + methodName + " return with " + retVal); } // 在一個(gè)方法執(zhí)行之后,只有在方法退出拋出異常時(shí),才能執(zhí)行通知 @AfterThrowing(pointcut = "businessService()", throwing = "ex") public void doAfterThrowingTask(JoinPoint joinPoint, Exception ex) { String methodName = joinPoint.getSignature().getName(); System.out.println("doAfterThrowingTask " + methodName + " occurs exception: " + ex); } // 在建議方法調(diào)用之前和之后,執(zhí)行通知。 @Around("businessService()") public Object doAroundTask(ProceedingJoinPoint jpoint) { Object result = null; String methodName = jpoint.getSignature().getName(); // 執(zhí)行目標(biāo)方法 try { // 前置通知 System.out.println("The method " + methodName + " begins with " + Arrays.asList(jpoint.getArgs())); result = jpoint.proceed(); // 返回通知 System.out.println("The method " + methodName + " ends with " + Arrays.asList(jpoint.getArgs())); } catch (Throwable e) { // 異常通知 System.out.println("The method " + methodName + " occurs expection : " + e); throw new RuntimeException(e); } // 后置通知 System.out.println("The method " + methodName + " ends"); return result; } }
類級(jí)注解:
@Aspect 聲明這是一個(gè)切面對(duì)象
方法級(jí)注解:
@Pointcut 聲明一個(gè)切點(diǎn)規(guī)則
@Before 方法執(zhí)行之前,執(zhí)行通知。
@After 方法執(zhí)行之后,不考慮其結(jié)果,執(zhí)行通知。
@AfterReturning 方法執(zhí)行之后,只有在方法成功完成時(shí),才能執(zhí)行通知
@AfterThrowing 方法執(zhí)行之后,只有在方法退出拋出異常時(shí),才能執(zhí)行通知
@Around 在方法調(diào)用之前和之后,執(zhí)行通知 等價(jià)于上面四個(gè)相加
想要了解更多詳細(xì)信息 可以查看下面的學(xué)習(xí)資料。
學(xué)習(xí)資料:官方文檔:
Spring Framework Reference Documentation -4.3.6.RELEASE
學(xué)習(xí)教程:
Spring 教程 - 極客學(xué)院 基于spring 4.1.6版
Spring 教程 - 簡(jiǎn)書 基于spring 4.1.6版
Spring初學(xué)快速入門 - 一百教程網(wǎng) 基于spring 4.0.4版
Spring 作為一個(gè)優(yōu)秀的開發(fā)框架幫助我們提高了開發(fā)效率,而且其中的IOC 與 AOP的思想可以幫助我們將項(xiàng)目構(gòu)建的更健壯,在下一篇文章中將簡(jiǎn)要的介紹一下Spring MVC 常用的注解。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/66769.html
摘要:筆者也是初學(xué)者,本文從創(chuàng)建項(xiàng)目工程開始,一步一步開始講解如何創(chuàng)建服務(wù)端和客戶端,一起學(xué)習(xí),共同進(jìn)步。下面我們使用工具創(chuàng)建相關(guān)項(xiàng)目。配置其中兩個(gè)屬性表明這個(gè)應(yīng)用是端,而不是端。至此,端和端已經(jīng)部署成功。 前言 spring cloud為互聯(lián)企業(yè)構(gòu)建微服務(wù)提供了一整套的技術(shù)組件,其中Eureka是Spring Cloud體系中的核心。Netfix不是一個(gè)技術(shù)概念,它原本是國(guó)外一個(gè)視頻網(wǎng)站的...
摘要:本例中介紹如何使用來(lái)完成服務(wù)調(diào)用并實(shí)現(xiàn)負(fù)載均衡。即,對(duì)于注冊(cè)中心而言,生產(chǎn)者和調(diào)用者都是端。文件配置如下在文件中,我們將應(yīng)用命名為,端口為,表示注冊(cè)中心地址。 前言 Ribbon是Spring Cloud體系中完成負(fù)載均衡的重要組件。Spring Cloud體系中有兩種完成服務(wù)調(diào)用的組件,一種是Ribbon+RestTemplate,另一種Feign。Feign默認(rèn)使用的也是Ribbo...
摘要:響應(yīng)式編程是基于異步和事件驅(qū)動(dòng)的非阻塞程序,只是垂直通過(guò)在內(nèi)啟動(dòng)少量線程擴(kuò)展,而不是水平通過(guò)集群擴(kuò)展。三特性常用的生產(chǎn)的特性如下響應(yīng)式編程模型適用性內(nèi)嵌容器組件還有對(duì)日志消息測(cè)試及擴(kuò)展等支持。 摘要: 原創(chuàng)出處 https://www.bysocket.com 「公眾號(hào):泥瓦匠BYSocket 」歡迎關(guān)注和轉(zhuǎn)載,保留摘要,謝謝! 02:WebFlux 快速入門實(shí)踐 文章工程: JDK...
摘要:編寫一個(gè)接口創(chuàng)建命名為根據(jù)實(shí)際情況修改創(chuàng)建類,內(nèi)容如下啟動(dòng)主程序,使用等工具發(fā)起請(qǐng)求,可以看到頁(yè)面返回編寫單元測(cè)試用例打開的下的測(cè)試入口類。 簡(jiǎn)介 在您第1次接觸和學(xué)習(xí)Spring框架的時(shí)候,是否因?yàn)槠浞彪s的配置而退卻了?在你第n次使用Spring框架的時(shí)候,是否覺(jué)得一堆反復(fù)黏貼的配置有一些厭煩?那么您就不妨來(lái)試試使用Spring Boot來(lái)讓你更易上手,更簡(jiǎn)單快捷地構(gòu)建Spring應(yīng)...
閱讀 2152·2023-04-25 22:58
閱讀 1487·2021-09-22 15:20
閱讀 2771·2019-08-30 15:56
閱讀 2116·2019-08-30 15:54
閱讀 2238·2019-08-29 12:31
閱讀 2842·2019-08-26 13:37
閱讀 669·2019-08-26 13:25
閱讀 2173·2019-08-26 11:58