日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

spring框架_一篇文章带你理解Spring框架

發(fā)布時間:2024/9/30 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring框架_一篇文章带你理解Spring框架 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

雖然現(xiàn)在流行用SpringBoot了,很多配置已經(jīng)簡化和封裝了,但是對于Spring的一些基礎(chǔ)我們了解一些是對我們自己的架構(gòu)思想很有幫助的!接下來和筆者一起來探討一下Spring框架吧!

1、什么是Spring框架?Spring框架有哪些主要模塊?

Spring框架是一個為Java應(yīng)用程序的開發(fā)提供了綜合、廣泛的基礎(chǔ)性支持的Java平臺。Spring幫助開發(fā)者解決了開發(fā)中基礎(chǔ)性的問題,使得開發(fā)人員可以專注于應(yīng)用程序的開發(fā)。Spring框架本身亦是按照設(shè)計模式精心打造,這使得我們可以在開發(fā)環(huán)境中安心的集成Spring框架,不必?fù)?dān)心Spring是如何在后臺進(jìn)行工作的。

Spring框架至今已集成了20多個模塊。這些模塊主要被分如下圖所示的核心容器、數(shù)據(jù)訪問/集成,、Web、AOP(面向切面編程)、工具、消息和測試模塊。

更多信息:Spring 框架教程。

2、使用Spring框架能帶來哪些好處?

下面列舉了一些使用Spring框架帶來的主要好處:

  • Dependency Injection(DI) 方法使得構(gòu)造器和JavaBean properties文件中的依賴關(guān)系一目了然。
  • 與EJB容器相比較,IoC容器更加趨向于輕量級。這樣一來IoC容器在有限的內(nèi)存和CPU資源的情況下進(jìn)行應(yīng)用程序的開發(fā)和發(fā)布就變得十分有利。
  • Spring并沒有閉門造車,Spring利用了已有的技術(shù)比如ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其他視圖技術(shù)。
  • Spring框架是按照模塊的形式來組織的。由包和類的編號就可以看出其所屬的模塊,開發(fā)者僅僅需要選用他們需要的模塊即可。
  • 要測試一項用Spring開發(fā)的應(yīng)用程序十分簡單,因為測試相關(guān)的環(huán)境代碼都已經(jīng)囊括在框架中了。更加簡單的是,利用JavaBean形式的POJO類,可以很方便的利用依賴注入來寫入測試數(shù)據(jù)。
  • Spring的Web框架亦是一個精心設(shè)計的Web MVC框架,為開發(fā)者們在web框架的選擇上提供了一個除了主流框架比如Struts、過度設(shè)計的、不流行web框架的以外的有力選項。
  • Spring提供了一個便捷的事務(wù)管理接口,適用于小型的本地事物處理(比如在單DB的環(huán)境下)和復(fù)雜的共同事物處理(比如利用JTA的復(fù)雜DB環(huán)境)。

3、什么是控制反轉(zhuǎn)(IOC)?什么是依賴注入?

控制反轉(zhuǎn)是應(yīng)用于軟件工程領(lǐng)域中的,在運行時被裝配器對象來綁定耦合對象的一種編程技巧,對象之間耦合關(guān)系在編譯時通常是未知的。在傳統(tǒng)的編程方式中,業(yè)務(wù)邏輯的流程是由應(yīng)用程序中的早已被設(shè)定好關(guān)聯(lián)關(guān)系的對象來決定的。在使用控制反轉(zhuǎn)的情況下,業(yè)務(wù)邏輯的流程是由對象關(guān)系圖來決定的,該對象關(guān)系圖由裝配器負(fù)責(zé)實例化,這種實現(xiàn)方式還可以將對象之間的關(guān)聯(lián)關(guān)系的定義抽象化。而綁定的過程是通過“依賴注入”實現(xiàn)的。

控制反轉(zhuǎn)是一種以給予應(yīng)用程序中目標(biāo)組件更多控制為目的設(shè)計范式,并在我們的實際工作中起到了有效的作用。

依賴注入是在編譯階段尚未知所需的功能是來自哪個的類的情況下,將其他對象所依賴的功能對象實例化的模式。這就需要一種機制用來激活相應(yīng)的組件以提供特定的功能,所以依賴注入是控制反轉(zhuǎn)的基礎(chǔ)。否則如果在組件不受框架控制的情況下,框架又怎么知道要創(chuàng)建哪個組件?

在Java中依然注入有以下三種實現(xiàn)方式:

  • 構(gòu)造器注入
  • Setter方法注入
  • 接口注入
  • 4、請解釋下Spring框架中的IoC?

    Spring中的 org.springframework.beans 包和 org.springframework.context包構(gòu)成了Spring框架IoC容器的基礎(chǔ)。

    BeanFactory 接口提供了一個先進(jìn)的配置機制,使得任何類型的對象的配置成為可能。ApplicationContex接口對BeanFactory(是一個子接口)進(jìn)行了擴(kuò)展,在BeanFactory的基礎(chǔ)上添加了其他功能,比如與Spring的AOP更容易集成,也提供了處理message resource的機制(用于國際化)、事件傳播以及應(yīng)用層的特別配置,比如針對Web應(yīng)用的WebApplicationContext。

    org.springframework.beans.factory.BeanFactory 是Spring IoC容器的具體實現(xiàn),用來包裝和管理前面提到的各種bean。BeanFactory接口是Spring IoC 容器的核心接口。

    5、BeanFactory和ApplicationContext有什么區(qū)別?

    BeanFactory 可以理解為含有bean集合的工廠類。BeanFactory 包含了種bean的定義,以便在接收到客戶端請求時將對應(yīng)的bean實例化。

    BeanFactory還能在實例化對象的時生成協(xié)作類之間的關(guān)系。此舉將bean自身與bean客戶端的配置中解放出來。BeanFactory還包含了bean生命周期的控制,調(diào)用客戶端的初始化方法(initialization methods)和銷毀方法(destruction methods)。

    從表面上看,application context如同bean factory一樣具有bean定義、bean關(guān)聯(lián)關(guān)系的設(shè)置,根據(jù)請求分發(fā)bean的功能。但application context在此基礎(chǔ)上還提供了其他的功能。

  • 提供了支持國際化的文本消息
  • 統(tǒng)一的資源文件讀取方式
  • 已在監(jiān)聽器中注冊的bean的事件
  • 以下是三種較常見的 ApplicationContext 實現(xiàn)方式:

    1、ClassPathXmlApplicationContext:從classpath的XML配置文件中讀取上下文,并生成上下文定義。應(yīng)用程序上下文從程序環(huán)境變量中取得。

    ApplicationContext context = new ClassPathXmlApplicationContext(“bean.xml”);

    2、FileSystemXmlApplicationContext :由文件系統(tǒng)中的XML配置文件讀取上下文。

    ApplicationContext context = new FileSystemXmlApplicationContext(“bean.xml”);

    3、XmlWebApplicationContext:由Web應(yīng)用的XML文件讀取上下文。

    6、Spring有幾種配置方式?

    將Spring配置到應(yīng)用開發(fā)中有以下三種方式:

  • 基于XML的配置
  • 基于注解的配置
  • 基于Java的配置
  • 7、如何用基于XML配置的方式配置Spring?

    在Spring框架中,依賴和服務(wù)需要在專門的配置文件來實現(xiàn),我常用的XML格式的配置文件。這些配置文件的格式通常用開頭,然后一系列的bean定義和專門的應(yīng)用配置選項組成。

    SpringXML配置的主要目的時候是使所有的Spring組件都可以用xml文件的形式來進(jìn)行配置。這意味著不會出現(xiàn)其他的Spring配置類型(比如聲明的方式或基于Java Class的配置方式)

    Spring的XML配置方式是使用被Spring命名空間的所支持的一系列的XML標(biāo)簽來實現(xiàn)的。Spring有以下主要的命名空間:context、beans、jdbc、tx、aop、mvc和aso。

    下面這個web.xml僅僅配置了DispatcherServlet,這件最簡單的配置便能滿足應(yīng)用程序配置運行時組件的需求。

    Archetype Created Web Applicationspring org.springframework.web.servlet.DispatcherServlet 1spring/

    8、如何用基于Java配置的方式配置Spring?

    Spring對Java配置的支持是由@Configuration注解和@Bean注解來實現(xiàn)的。由@Bean注解的方法將會實例化、配置和初始化一個新對象,這個對象將由Spring的IoC容器來管理。@Bean聲明所起到的作用與 元素類似。被@Configuration所注解的類則表示這個類的主要目的是作為bean定義的資源。被@Configuration聲明的類可以通過在同一個類的內(nèi)部調(diào)用@bean方法來設(shè)置嵌入bean的依賴關(guān)系。

    最簡單的@Configuration 聲明類請參考下面的代碼:

    @Configuration public class AppConfig { @Bean public MyService myService() { return new MyServiceImpl(); } }

    對于上面的@Beans配置文件相同的XML配置文件如下:

    上述配置方式的實例化方式如下:利用AnnotationConfigApplicationContext 類進(jìn)行實例化

    public static void main(String[] args) { ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); MyService myService = ctx.getBean(MyService.class); myService.doStuff(); }

    要使用組件組建掃描,僅需用@Configuration進(jìn)行注解即可:

    @Configuration @ComponentScan(basePackages = "com.howtodoinjava") public class AppConfig { ... }

    在上面的例子中,com.acme包首先會被掃到,然后再容器內(nèi)查找被@Component 聲明的類,找到后將這些類按照Sring bean定義進(jìn)行注冊。

    如果你要在你的web應(yīng)用開發(fā)中選用上述的配置的方式的話,需要用AnnotationConfigWebApplicationContext 類來讀取配置文件,可以用來配置Spring的Servlet監(jiān)聽器ContrextLoaderListener或者Spring MVC的DispatcherServlet。

    contextClass org.springframework.web.context.support.AnnotationConfigWebApplicationContext contextConfigLocationcom.howtodoinjava.AppConfigorg.springframework.web.context.ContextLoaderListenerdispatcherorg.springframework.web.servlet.DispatcherServletcontextClass org.springframework.web.context.support.AnnotationConfigWebApplicationContext contextConfigLocationcom.howtodoinjava.web.MvcConfigdispatcher/app/*

    9、怎樣用注解的方式配置Spring?

    Spring在2.5版本以后開始支持用注解的方式來配置依賴注入。可以用注解的方式來替代XML方式的bean描述,可以將bean描述轉(zhuǎn)移到組件類的內(nèi)部,只需要在相關(guān)類上、方法上或者字段聲明上使用注解即可。注解注入將會被容器在XML注入之前被處理,所以后者會覆蓋掉前者對于同一個屬性的處理結(jié)果。

    注解裝配在Spring中是默認(rèn)關(guān)閉的。所以需要在Spring文件中配置一下才能使用基于注解的裝配模式。如果你想要在你的應(yīng)用程序中使用關(guān)于注解的方法的話,請參考如下的配置。

    在 標(biāo)簽配置完成以后,就可以用注解的方式在Spring中向?qū)傩浴⒎椒ê蜆?gòu)造方法中自動裝配變量。

    下面是幾種比較重要的注解類型:

  • @Required:該注解應(yīng)用于設(shè)值方法。
  • @Autowired:該注解應(yīng)用于有值設(shè)值方法、非設(shè)值方法、構(gòu)造方法和變量。
  • @Qualifier:該注解和@Autowired注解搭配使用,用于消除特定bean自動裝配的歧義。
  • JSR-250 Annotations:Spring支持基于JSR-250 注解的以下注解,@Resource、@PostConstruct 和 @PreDestroy。
  • 10、請解釋Spring Bean的生命周期?

    Spring Bean的生命周期簡單易懂。在一個bean實例被初始化時,需要執(zhí)行一系列的初始化操作以達(dá)到可用的狀態(tài)。同樣的,當(dāng)一個bean不在被調(diào)用時需要進(jìn)行相關(guān)的析構(gòu)操作,并從bean容器中移除。

    Spring bean factory 負(fù)責(zé)管理在spring容器中被創(chuàng)建的bean的生命周期。Bean的生命周期由兩組回調(diào)(call back)方法組成。

  • 初始化之后調(diào)用的回調(diào)方法。
  • 銷毀之前調(diào)用的回調(diào)方法。
  • Spring框架提供了以下四種方式來管理bean的生命周期事件:

    • InitializingBean和DisposableBean回調(diào)接口
    • 針對特殊行為的其他Aware接口
    • Bean配置文件中的Custom init()方法和destroy()方法
    • @PostConstruct和@PreDestroy注解方式

    使用customInit()和 customDestroy()方法管理bean生命周期的代碼樣例如下:

    更多內(nèi)容請參考:Spring生命周期Spring Bean Life Cycle。

    11、Spring Bean的作用域之間有什么區(qū)別?

    Spring容器中的bean可以分為5個范圍。所有范圍的名稱都是自說明的,但是為了避免混淆,還是讓我們來解釋一下:

  • singleton:這種bean范圍是默認(rèn)的,這種范圍確保不管接受到多少個請求,每個容器中只有一個bean的實例,單例的模式由bean factory自身來維護(hù)。
  • prototype:原形范圍與單例范圍相反,為每一個bean請求提供一個實例。
  • request:在請求bean范圍內(nèi)會每一個來自客戶端的網(wǎng)絡(luò)請求創(chuàng)建一個實例,在請求完成以后,bean會失效并被垃圾回收器回收。
  • Session:與請求范圍類似,確保每個session中有一個bean的實例,在session過期后,bean會隨之失效。
  • global-session:global-session和Portlet應(yīng)用相關(guān)。當(dāng)你的應(yīng)用部署在Portlet容器中工作時,它包含很多portlet。如果你想要聲明讓所有的portlet共用全局的存儲變量的話,那么這全局變量需要存儲在global-session中。
  • 全局作用域與Servlet中的session作用域效果相同。

    更多內(nèi)容請參考 : Spring Bean Scopes。

    12、什么是Spring inner beans?

    在Spring框架中,無論何時bean被使用時,當(dāng)僅被調(diào)用了一個屬性。一個明智的做法是將這個bean聲明為內(nèi)部bean。內(nèi)部bean可以用setter注入“屬性”和構(gòu)造方法注入“構(gòu)造參數(shù)”的方式來實現(xiàn)。

    比如,在我們的應(yīng)用程序中,一個Customer類引用了一個Person類,我們的要做的是創(chuàng)建一個Person的實例,然后在Customer內(nèi)部使用。

    public class Customer { private Person person; //Setters and Getters } public class Person { private String name; private String address; private int age; //Setters and Getters }

    內(nèi)部bean的聲明方式如下:

    13、Spring框架中的單例Beans是線程安全的么?

    Spring框架并沒有對單例bean進(jìn)行任何多線程的封裝處理。關(guān)于單例bean的線程安全和并發(fā)問題需要開發(fā)者自行去搞定。但實際上,大部分的Spring bean并沒有可變的狀態(tài)(比如Serview類和DAO類),所以在某種程度上說Spring的單例bean是線程安全的。如果你的bean有多種狀態(tài)的話(比如 View Model 對象),就需要自行保證線程安全。

    最淺顯的解決辦法就是將多態(tài)bean的作用域由“singleton”變更為“prototype”。

    由于篇幅限制,剩下的內(nèi)容下次為大家分享。

    喜歡這篇文章的話,可以為作者點個喜歡,點下關(guān)注,每天都會分享Java相關(guān)文章!

    還有不定時的福利贈送,包括整理的面試題,學(xué)習(xí)資料,源碼等~~

    總結(jié)

    以上是生活随笔為你收集整理的spring框架_一篇文章带你理解Spring框架的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩久久在线 | 91美女精品 | 天天操夜夜骑 | 蜜桃免费在线视频 | 国产成a人亚洲精v品在线观看 | 午夜888| 脱美女衣服亲摸揉视频 | 污片在线看 | 黄色国产网站 | 蜜臀av首页 | 黄色性网站 | 免费看美女隐私网站 | 禁断介护老人中文字幕 | 欧美黄色大片免费看 | 精品久久久国产 | 亚洲免费看黄 | 午夜影院免费体验区 | 免费大片在线观看www | 久久人人爽 | 欧美高清hd19 | 99精品国自产在线 | 手机福利在线 | 亚洲av无码专区在线电影 | av在线第一页 | 国产av国片偷人妻麻豆 | 国产免费av片在线观看 | 婷婷色综合| 偷拍女澡堂一区二区三区 | 精品视频在线观看一区 | 国产成人精品一区二区在线小狼 | 人人射人人干 | 诱惑av| 免费播放av| 热播网 | 欧美一本在线 | 日韩乱码一区二区 | 高清视频一区二区三区 | 日韩精品久久久久久久电影99爱 | h视频网站在线观看 | 国偷自产av一区二区三区麻豆 | 天天草夜夜 | 情侣自拍av| 美女露隐私网站 | 黄色网免费| 福利在线免费视频 | 性久久久久久久 | 一本一道精品欧美中文字幕 | 久久97人妻无码一区二区三区 | 免费无码国产精品 | 午夜精品久久久久久久久久久 | 自拍欧美日韩 | 97久久人人超碰caoprom欧美 | 综合 欧美 亚洲日本 | 中国av一区二区三区 | 亚洲av无码国产精品麻豆天美 | 伊人国产一区 | 日本久久伊人 | 人妻无码一区二区三区免费 | 台湾av在线 | 亚洲精品一区在线 | 久久视频免费看 | 欧美日韩精品一区 | 中文写幕一区二区三区免费观成熟 | 久久久精品中文字幕麻豆发布 | 久久精品3 | 国产高清一二三区 | 亚洲第一黄色网址 | 日本黄色动态图 | 国产成人免费在线观看 | 狠狠干狠狠操视频 | 亚洲午夜福利一区二区三区 | 男女网站视频 | 久久国产网站 | 黄色av网站免费看 | 亚洲精品aaa | 七仙女欲春2一级裸体片 | 精品久久久久久无码国产 | 丁香花高清在线 | 在线播放av网站 | 一级成人免费 | 胸网站| 精品一二三区 | 国产偷啪| 国产精品久久久久久久久免费桃花 | 99热精品国产 | 国产高清sp | 99mav| 国产chinasex对白videos麻豆 | 黄色免费视频网站 | 国产三级三级在线观看 | 天天弄天天操 | 97国产在线视频 | 国产精品夜夜嗨 | 中国老熟妇自拍hd发布 | 男女av网站 | 亚洲一区二区三区高清视频 | av免费网站观看 | 久久精品男人的天堂 | 亚洲吧 |