国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) Java java教程 Spring IOC容器

Spring IOC容器

Aug 19, 2017 pm 01:46 PM
spring 容器

1.Spring框架簡(jiǎn)介

什麼是Spring?

Spring是一個(gè)開(kāi)源的輕量級(jí)的應(yīng)用開(kāi)發(fā)框架,其目的是用於簡(jiǎn)化企業(yè)級(jí)應(yīng)用程式開(kāi)發(fā),減少侵入

Spring提供的IOC和AOP應(yīng)用,可以將元件的耦合度降至最低,即解耦,便於系統(tǒng)日後的維護(hù)和升級(jí)

Spring為系統(tǒng)提供了一個(gè)整體的解決方案,開(kāi)發(fā)者可以利用它本身提供的功能外,也可以與第三方框架和技術(shù)整合應(yīng)用,可以自由選擇採(cǎi)用哪種技術(shù)進(jìn)行開(kāi)發(fā)

2.容器和Bean管理

Spring容器簡(jiǎn)介

#在Spring中,任何java類別和javaBean都被當(dāng)成Bean處理,這些Bean透過(guò)容器管理和應(yīng)用程式

Spring容器實(shí)作了IOC和AOP機(jī)制,這些機(jī)制可以簡(jiǎn)化Bean物件建立和Bean物件之間的解耦

Spring容器有BeanFactory和ApplicationContext兩種類型

(什麼是javaBean:一種簡(jiǎn)單規(guī)範(fàn)的java物件;何時(shí)使用Spring:當(dāng)需要管理javaBean物件時(shí)候就可以使用,Spring是最簡(jiǎn)??潔的物件管理方案之一)

Spring容器的實(shí)例化

ApplicationContext繼承自BeanFactory接口,擁有更多的企業(yè)級(jí)方法,推薦使用該類型,實(shí)例化方法如下:

# //載入檔案系統(tǒng)中的設(shè)定檔實(shí)例化

String conf = “C:\applicationContext.xml”;

ApplicationContext ac = new FileSystemXmlApplicationContext(conf);

//載入工程classpath下的設(shè)定檔實(shí)例化

String conf = “applicationContext.xml”;

ApplicationContext ac = new ClassPathXmlApplicationContext(conf);

## Spring容器的使用

從本質(zhì)上講,BeanFactory和ApplicationContext僅僅只是一個(gè)維護(hù)Bean定義以及相互依賴關(guān)係的高階工廠介面。透過(guò)BeanFactory和ApplicationContext我們可以存取bean定義

首先在容器設(shè)定檔applicationContext.xml中加入Bean定義

然後在建立BeanFactory和ApplicationContext容器物件後,呼叫g(shù)etBean()方法取得Bean的實(shí)例即可[getBean("識(shí)別碼")]

Bean的實(shí)例化

Spring容器建立Bean物件的方法有以下三種:#-用建構(gòu)器來(lái)實(shí)例化

#

(id或name屬性用來(lái)指定Bean名稱,用來(lái)從Spring中尋找這個(gè)Bean物件;class用來(lái)指定Bean類型,會(huì)自動(dòng)呼叫無(wú)參數(shù)建構(gòu)器建立物件)-使用靜態(tài)工廠方法實(shí)例化

#

(id屬性用於指定Bean名稱,class屬性用於指定工廠類型,factory-method屬性用於指定工廠中建立Bean物件的方法,必須用static修飾的方法)-使用實(shí)例工廠方法實(shí)例化

##

#?(id用於指定Bean名稱,factory-bean屬性用於指定工廠Bean物件,factory-method屬性用於指定工廠中建立Bean物件的方法)

(將物件建立規(guī)則告訴Spring,Spring會(huì)幫你去建立物件;基於設(shè)定和預(yù)設(shè)規(guī)則,減少了程式碼的書(shū)寫(xiě))

?Bean的命名

Bean的名稱:

在Spring容器中,每個(gè)Bean都需要有一個(gè)名字(即識(shí)別符),該名字可以用元素的id或name屬性指定;id屬性比name嚴(yán)格,要求具有唯一性,不允許用"/"等特殊字元

Bean的別名

#為已定義好的Bean,再增加另一個(gè)名字引用,可以使用

Bean的作用域:

#Spring容器在實(shí)例化Bean時(shí),可以建立下列作用域的Bean物件

1、singleton作用域


在每個(gè)Spring IOC容器中一個(gè)bean定義對(duì)應(yīng)一個(gè)物件實(shí)例,預(yù)設(shè)項(xiàng)目
設(shè)定實(shí)例:




2、prototype


一個(gè)bean定義對(duì)應(yīng)多個(gè)物件實(shí)例
設(shè)定實(shí)例:




3、request

request表示該針對(duì)每一次HTTP請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的bean,同時(shí)該bean僅在當(dāng)前HTTP request內(nèi)有效


# request、session、global session使用的時(shí)候,首先要在初始化web的web.xml中做如下配置:


如果你使用的是Servlet 2.4及以上的web容器,那麼你只需要在web應(yīng)用的XML宣告檔web.xml中增加下述ContextListener即可:
...org.springframework.web.context.request. RequestContextListener...

如果是Servlet2.4以前的web容器,那麼你要使用一個(gè)javax.servlet.Filter的實(shí)作:
.. requestContextFilter org.springframework.web.filter.RequestContextFilter<ter-class>org.springframework.web.filter.RequestContextFilter requestContextFilter /*/*...< ;/web-app>
接著既可以配置bean的作用域了:
4、session



session作用域表示該針對(duì)每一次HTTP請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的bean,同時(shí)該bean只在目前HTTP session內(nèi)有效(在一個(gè)HTTPSession中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例,僅限於Web環(huán)境)
配置實(shí)例:
和request配置實(shí)例??的前提一樣,配置好web啟動(dòng)文件就可以如下配置:
5、global session



在一個(gè)全域的HTTPSession中,一個(gè)bean定義對(duì)應(yīng)一個(gè)實(shí)例,僅在基於portlet的Web應(yīng)用中才有意義,Portlet規(guī)範(fàn)定義了全域Session的概念

設(shè)定實(shí)例:

和request設(shè)定實(shí)例的前提一樣,設(shè)定好web啟動(dòng)檔就可以如下設(shè)定:

(上面的Bean作用域,可以透過(guò)定義的scope屬性指定)

Bean的生命週期回呼

指定初始化回呼方法:

#

指定銷毀回呼方法,僅適用於singleton模式的bean:#########

##1 ##在頂級(jí)的元素中的default-init-method屬性,可以為容器所有指定初始化回調(diào)方法

  

#

在頂級(jí)的元素中的default-destroy-method屬性,可以為容器所有指定銷毀回呼方法

#

  

##

Bean延遲實(shí)例化

在ApplicationContext實(shí)作的預(yù)設(shè)行為就是在啟動(dòng)時(shí)將所有singleton bean提前進(jìn)行實(shí)例化#如果不想讓一個(gè)singleton bean在ApplicationContext初始化時(shí)被提前實(shí)例化,可以使用元素的lazy-init = "true" 屬性改變一個(gè)延遲初始化bean將在第一次被用到時(shí)實(shí)例化

在頂級(jí)的元素元素中的default-lazy-init屬性,可以為容器所有指定延遲實(shí)例化特性

指定bean依賴關(guān)係

當(dāng)一個(gè)bean對(duì)另一個(gè)bean有依賴關(guān)係時(shí),可以利用元素的depends-on屬性指定

當(dāng)一個(gè)bean對(duì)多個(gè)bean存在依賴關(guān)係時(shí),depends-on屬性可以指定多個(gè)bean名,用逗號(hào)隔開(kāi)

3.容器的IOC應(yīng)用

IOC概念#########IOC全名為Inversion of? Control,被翻譯為控制反轉(zhuǎn);######IOC是指程式中物件的取得方式發(fā)生反轉(zhuǎn),由最初的new方式創(chuàng)建,轉(zhuǎn)變?yōu)橛傻谌娇蚣軇?chuàng)建,注入。第三方框架一般是透過(guò)配置方式指定注入哪一個(gè)具體實(shí)現(xiàn),從而降低了物件之間的耦合度######IOC按實(shí)現(xiàn)方法不同,可以分為依賴注入DI和依賴查找兩種### ###Spring容器是採(cǎi)用DI方式實(shí)現(xiàn)了IOC控制,IOC是Spring容器的基礎(chǔ)和核心##########DI概念#########DI全名為Dependency? Injection,被譯為依賴注入######DI的基本原理就是將一起工作具有關(guān)係的對(duì)象,透過(guò)建構(gòu)方法參數(shù)或方法參數(shù)傳入建立聯(lián)繫,因此容器的工作就是在創(chuàng)建bean時(shí)注入那些依賴關(guān)係#### ##IOC是一種思想,而DI是實(shí)現(xiàn)IOC的主要技術(shù)途徑######DI主要有兩種注入方式,即Setter注入和建構(gòu)器注入#########Setterr注入# ##############透過(guò)呼叫無(wú)參考構(gòu)造器或無(wú)參音static工廠方法實(shí)例化bean之後,呼叫該bean的setter方法,即可實(shí)現(xiàn)setter方式的注入##### #######public class JDBCDataSource{######  private String driver;######  public void setDriver(String driver){######    try{{  

  

  

  

建構(gòu)器注入

#基於建構(gòu)器的注入是透過(guò)呼叫帶參數(shù)的構(gòu)造器來(lái)實(shí)現(xiàn)的,容器在bean被實(shí)例化的時(shí)候,根據(jù)參數(shù)類型執(zhí)行對(duì)應(yīng)的建構(gòu)器

public class OracleUserDAO implements UserDAO{

#  private JDBCDataSource dataSource;

  public OracleUserDAO(JDBCDataSource dataSource){

    this.dataSource = dataSource;

  }

 /

#  }

 //其他程式碼.....##//其他程式碼.....##}

按建構(gòu)器參數(shù)索引指定注入

#

  

  

  

  

#

  < ;constructor-arg index = "0"? ref = "dataSource"/>

#

#自動(dòng)組裝

#Spring? IOC容器可以自動(dòng)組裝(autowire)相互協(xié)作bean之間的關(guān)聯(lián)關(guān)係,autowire可以針對(duì)單一bean進(jìn)行設(shè)置,autowire的方便之處在於減少xml的注入配置

在xml設(shè)定檔中,可以在< ;bean/>元素中使用autowire屬性指定自動(dòng)組裝規(guī)則,一共有五種類型值

#屬性值為no:

#禁止自動(dòng)組裝,預(yù)設(shè)值;

屬性值為byName:根據(jù)屬性名稱自動(dòng)裝配,此選項(xiàng)將檢查容器並根據(jù)名字查找與屬性完全一致的bean,並將其與屬性自動(dòng)裝配;

屬性值為byType:如果容器中存在一個(gè)與指定屬性類型相同的bean,那麼將與該屬性自動(dòng)組裝;

屬性值為constructor: 與byType的方式類似,不同之處在於它應(yīng)用於建構(gòu)器參數(shù);

屬性值為autodetect:

透過(guò)bean類別來(lái)決定使用constructor還是byType方式進(jìn)行自動(dòng)裝配,如果發(fā)現(xiàn)預(yù)設(shè)的建構(gòu)器,那麼將使用byType方式

設(shè)定範(fàn)例:

  

#

#上述配置,在UserService中如果存在接收UserDao類型的方法Setter方法,Spring就可以自動(dòng)將userDAO物件注入進(jìn)去

#########

以上是Spring IOC容器的詳細(xì)內(nèi)容。更多資訊請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

Laravel 教程
1600
29
PHP教程
1502
276
編程新範(fàn)式,當(dāng)Spring Boot遇上OpenAI 編程新範(fàn)式,當(dāng)Spring Boot遇上OpenAI Feb 01, 2024 pm 09:18 PM

2023年,AI技術(shù)已成為熱門(mén)話題,對(duì)各行業(yè)產(chǎn)生了巨大影響,程式設(shè)計(jì)領(lǐng)域尤其如此。人們?cè)絹?lái)越認(rèn)識(shí)到AI技術(shù)的重要性,Spring社群也不例外。隨著GenAI(GeneralArtificialIntelligence)技術(shù)的不斷進(jìn)步,簡(jiǎn)化具備AI功能的應(yīng)用程式的創(chuàng)建變得至關(guān)重要和迫切。在這個(gè)背景下,"SpringAI"應(yīng)運(yùn)而生,旨在簡(jiǎn)化開(kāi)發(fā)AI功能應(yīng)用程式的過(guò)程,使其變得簡(jiǎn)單直觀,避免不必要的複雜性。透過(guò)"SpringAI",開(kāi)發(fā)者可以更輕鬆地建立具備AI功能的應(yīng)用程序,將其變得更加易於使用和操作

利用Spring Boot以及Spring AI建構(gòu)生成式人工智慧應(yīng)用 利用Spring Boot以及Spring AI建構(gòu)生成式人工智慧應(yīng)用 Apr 28, 2024 am 11:46 AM

Spring+AI作為行業(yè)領(lǐng)導(dǎo)者,透過(guò)其強(qiáng)大、靈活的API和先進(jìn)的功能,為各種行業(yè)提供了領(lǐng)先性的解決方案。在本專題中,我們將深入探討Spring+AI在各領(lǐng)域的應(yīng)用範(fàn)例,每個(gè)案例都將展示Spring+AI如何滿足特定需求,實(shí)現(xiàn)目標(biāo),並將這些LESSONSLEARNED擴(kuò)展到更廣泛的應(yīng)用。希望這個(gè)專題能對(duì)你有所啟發(fā),更深入地理解和利用Spring+AI的無(wú)限可能。 Spring框架在軟體開(kāi)發(fā)領(lǐng)域已經(jīng)有超過(guò)20年的歷史,自SpringBoot1.0版本發(fā)布以來(lái)已有10年。現(xiàn)在,無(wú)人會(huì)質(zhì)疑,Spring

spring編程式事務(wù)有哪些實(shí)作方式 spring編程式事務(wù)有哪些實(shí)作方式 Jan 08, 2024 am 10:23 AM

spring編程式事務(wù)的實(shí)作方式:1、使用TransactionTemplate;2、使用TransactionCallback和TransactionCallbackWithoutResult;3、使用Transactional註解;4、使用TransactionTemplate和@Transactional結(jié)合使用;5、自訂事務(wù)管理器。

華為、浪潮等單位合作創(chuàng)建的開(kāi)源容器鏡像中心,AtomHub,宣布正式開(kāi)放公測(cè),可穩(wěn)定下載國(guó)內(nèi)服務(wù) 華為、浪潮等單位合作創(chuàng)建的開(kāi)源容器鏡像中心,AtomHub,宣布正式開(kāi)放公測(cè),可穩(wěn)定下載國(guó)內(nèi)服務(wù) Jan 02, 2024 pm 03:54 PM

華為官方消息顯示,開(kāi)放原子開(kāi)發(fā)者大會(huì)以「一切為了開(kāi)發(fā)者」為主題,在無(wú)錫舉辦了兩天,時(shí)間為12月16日至17日會(huì)上,由開(kāi)放原子開(kāi)源基金會(huì)主導(dǎo),華為、浪潮、DaoCloud、諧雲(yún)、青雲(yún)、颶風(fēng)引擎以及OpenSDV開(kāi)源聯(lián)盟、openEuler社群、OpenCloudOS社群等成員單位共同發(fā)起建置的AtomHub可信任鏡像中心正式開(kāi)放公測(cè)。 AtomHub秉承共建、共治、共享的理念,旨在為開(kāi)源組織和開(kāi)發(fā)者提供中立、開(kāi)放共建的可信開(kāi)源容器鏡像中心。鑑於DockerHub等鏡像倉(cāng)庫(kù)的不穩(wěn)定性和不可控性,以及一些

Spring如何設(shè)定事務(wù)隔離級(jí)別 Spring如何設(shè)定事務(wù)隔離級(jí)別 Jan 26, 2024 pm 05:38 PM

Spring設(shè)定事務(wù)隔離等級(jí)的方法:1、使用@Transactional註解;2、在Spring設(shè)定檔中設(shè)定;3、使用PlatformTransactionManager;4、在Java配置類別中設(shè)定。詳細(xì)介紹:1、使用@Transactional註解,在需要進(jìn)行事務(wù)管理的類別或方法上加入@Transactional註解,並在屬性中設(shè)定隔離等級(jí);2、在Spring設(shè)定檔等等。

詳解Spring中的Bean取得方式 詳解Spring中的Bean取得方式 Dec 30, 2023 am 08:49 AM

Spring中Bean取得方式詳解在Spring框架中,Bean的取得是非常重要的一環(huán)。在應(yīng)用程式中,我們經(jīng)常需要使用依賴注入或動(dòng)態(tài)來(lái)取得Bean的實(shí)例。本文將詳細(xì)介紹Spring中Bean的取得方式,並給出具體的程式碼範(fàn)例。透過(guò)@Component註解取得Bean@Component註解是Spring框架中常用的註解之一。我們可以透過(guò)在類別上新增@Compone

spring如何設(shè)定檔 spring如何設(shè)定檔 Jan 18, 2024 pm 03:53 PM

spring設(shè)定檔的步驟:1、建立XML設(shè)定檔;2、新增必要的依賴;3、設(shè)定資料來(lái)源;4、定義bean;5、設(shè)定其他元件;6、注入依賴;7、設(shè)定環(huán)境;8、啟用自動(dòng)組裝;9、部署應(yīng)用程式;10、啟動(dòng)應(yīng)用程式。詳細(xì)介紹:1、建立XML設(shè)定文件,在專案的資源目錄下建立一個(gè)XML文件,這個(gè)文件將包含Spring的設(shè)定資訊;2、加入必要的依賴等等。

Spring Security權(quán)限控制框架使用指南 Spring Security權(quán)限控制框架使用指南 Feb 18, 2024 pm 05:00 PM

在後臺(tái)管理系統(tǒng)中,通常需要存取權(quán)限控制,以限制不同使用者對(duì)介面的存取能力。如果使用者缺乏特定權(quán)限,則無(wú)法存取某些介面。本文將用waynboot-mall專案舉例,跟大家介紹常見(jiàn)後管系統(tǒng)如何引入權(quán)限控制框架SpringSecurity。大綱如下:waynboot-mall專案網(wǎng)址:https://github.com/wayn111/waynboot-mall一、什麼是SpringSecuritySpringSecurity是一個(gè)基於Spring框架的開(kāi)源項(xiàng)目,旨在為Java應(yīng)用程式提供強(qiáng)大且靈活的安

See all articles