中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

長(zhǎng)沙響應(yīng)式網(wǎng)站設(shè)計(jì)有哪些優(yōu)化營(yíng)商環(huán)境發(fā)言材料

長(zhǎng)沙響應(yīng)式網(wǎng)站設(shè)計(jì)有哪些,優(yōu)化營(yíng)商環(huán)境發(fā)言材料,html網(wǎng)站頭部如何制作,wordpress 頁(yè)面分類一提起Spring,總感覺(jué)有太多知識(shí),無(wú)法詳盡,有些基礎(chǔ)理解就先不說(shuō)了,相信大家都已經(jīng)用過(guò)Spring了 下面簡(jiǎn)單針對(duì)常見(jiàn)Spring面試題做些回答 核心特性 IOC容器spring事件資源管理國(guó)際化校驗(yàn)數(shù)據(jù)綁定類型轉(zhuǎn)換spirng表達(dá)式面向切面編程……

一提起Spring,總感覺(jué)有太多知識(shí),無(wú)法詳盡,有些基礎(chǔ)理解就先不說(shuō)了,相信大家都已經(jīng)用過(guò)Spring了
下面簡(jiǎn)單針對(duì)常見(jiàn)Spring面試題做些回答

核心特性

  • IOC容器
  • spring事件
  • 資源管理
  • 國(guó)際化
  • 校驗(yàn)
  • 數(shù)據(jù)綁定
  • 類型轉(zhuǎn)換
  • spirng表達(dá)式
  • 面向切面編程
  • ……

SpringMVC流程

1、 用戶發(fā)送請(qǐng)求至前端控制器DispatcherServlet。

2、 DispatcherServlet收到請(qǐng)求調(diào)用HandlerMapping處理器映射器。

3、 處理器映射器找到具體的處理器(可以根據(jù)xml配置、注解進(jìn)行查找),生成處理器對(duì)象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。

4、 DispatcherServlet調(diào)用HandlerAdapter處理器適配器。

5、 HandlerAdapter經(jīng)過(guò)適配調(diào)用具體的處理器(Controller,也叫后端控制器)。

6、 Controller執(zhí)行完成返回ModelAndView。

7、 HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet。

8、 DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。

9、 ViewReslover解析后返回具體View。

10、DispatcherServlet根據(jù)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)。

11、 DispatcherServlet響應(yīng)用戶。

實(shí)例化Bean的方法initializeBean,該方法在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory類下

Bean生命周期

  1. Spring 容器根據(jù)配置中的 bean 定義 實(shí)例化 bean。

  2. Spring 使用依賴注入填充所有屬性,如 bean 中所定義的配置。

  3. invokeAwareMethods:如果 bean 實(shí)現(xiàn)BeanNameAware 接口,則工廠通過(guò)傳遞 bean 的 ID 來(lái)調(diào)用setBeanName()。如果bean實(shí)現(xiàn)BeanClassLoaderAware,則調(diào)用setBeanClassLoader()

  4. 如果 bean 實(shí)現(xiàn) BeanFactoryAware 接口,工廠通過(guò)傳遞自身的實(shí)例來(lái)調(diào)用 setBeanFactory()。

  5. 如果存在與 bean 關(guān)聯(lián)的任何BeanPostProcessors,則調(diào)用 preProcessBeforeInitialization() 方法

  6. 如果為 bean 指定了 init 方法( 的 init-method 屬性),那么將調(diào)用它。

  7. 最后,如果存在與 bean 關(guān)聯(lián)的任何 BeanPostProcessors,則將調(diào)用 postProcessAfterInitialization() 方法

  8. 如果 bean 實(shí)現(xiàn)DisposableBean 接口,當(dāng) spring 容器關(guān)閉時(shí),會(huì)調(diào)用 destory()。

  9. 如果為bean 指定了 destroy 方法( 的 destroy-method 屬性),那么將調(diào)用它。

在這里插入圖片描述

SPI機(jī)制

基于接口的編程+策略模式+配置文件

在Springboot的自動(dòng)裝配過(guò)程中,最終會(huì)加載META-INF/spring.factories文件,而加載的過(guò)程是由SpringFactoriesLoader加載的。從CLASSPATH下的每個(gè)jar包中搜索所有META-INF/spring.factories

配置文件,其實(shí)這里不僅僅是去ClassPath路徑下查詢,而是會(huì)掃描所有路徑下的jar包,只不過(guò)這個(gè)文件只會(huì)在ClassPath下的jar包中.

public static final String FACTORIES_RESOURCE_LOCATION = "META-INF/spring.factories";
// spring.factories文件的格式為:key=value1,value2,value3
// 從所有的jar包中找到META-INF/spring.factories文件
// 然后從文件中解析出key=factoryClass類名稱的所有value值
public static List<String> loadFactoryNames(Class<?> factoryClass, ClassLoader classLoader) {String factoryClassName = factoryClass.getName();// 取得資源文件的URLEnumeration<URL> urls = (classLoader != null ? classLoader.getResources(FACTORIES_RESOURCE_LOCATION) : ClassLoader.getSystemResources(FACTORIES_RESOURCE_LOCATION));List<String> result = new ArrayList<String>();// 遍歷所有的URLwhile (urls.hasMoreElements()) {URL url = urls.nextElement();// 根據(jù)資源文件URL解析properties文件,得到對(duì)應(yīng)的一組@Configuration類Properties properties = PropertiesLoaderUtils.loadProperties(new UrlResource(url));String factoryClassNames = properties.getProperty(factoryClassName);// 組裝數(shù)據(jù),并返回result.addAll(Arrays.asList(StringUtils.commaDelimitedListToStringArray(factoryClassNames)));}return result;
}

Bean循環(huán)依賴如何解決的

先調(diào)用構(gòu)造函數(shù)進(jìn)行實(shí)例化,然后填充屬性,再接著進(jìn)行其他附加操作和初始化,正是這樣的生命周期,才有了Spring的解決循環(huán)依賴,這樣的解決機(jī)制是根據(jù)Spring框架內(nèi)定義的三級(jí)緩存來(lái)實(shí)現(xiàn)的,也就是說(shuō):三級(jí)緩存解決了Bean之間的循環(huán)依賴

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

找出了前面提到的三級(jí)緩存,也就是三個(gè)Map集合類:

singletonObjects:第一級(jí)緩存,用于保存實(shí)例化、注入、初始化完成的bean實(shí)例

earlySingletonObjects:第二級(jí)緩存,用于保存實(shí)例化完成的bean實(shí)例(未注入和初始化)

singletonFactories:第三級(jí)緩存,用于保存bean創(chuàng)建工廠,以便于后面擴(kuò)展有機(jī)會(huì)創(chuàng)建代理對(duì)象。屬于提前暴露

后面專門針對(duì)這塊分析下源碼,下面是調(diào)用初始化的詳細(xì)步驟示例

在這里插入圖片描述

  1. 創(chuàng)建對(duì)象A,實(shí)例化的時(shí)候把A對(duì)象工廠放入三級(jí)緩存
  2. A注入屬性時(shí),發(fā)現(xiàn)依賴B,轉(zhuǎn)而去實(shí)例化B
  3. 同樣創(chuàng)建對(duì)象B,注入屬性時(shí)發(fā)現(xiàn)依賴A,一次從一級(jí)到三級(jí)緩存查詢A,從三級(jí)緩存通過(guò)對(duì)象工廠拿到A,把A放入二級(jí)緩存,同時(shí)刪除三級(jí)緩存中的A,此時(shí),B已經(jīng)實(shí)例化并且初始化完成,把B放入一級(jí)緩存
  4. 接著繼續(xù)創(chuàng)建A,順利從一級(jí)緩存拿到實(shí)例化且初始化完成的B對(duì)象,A對(duì)象創(chuàng)建也完成,刪除二級(jí)緩存中的A,同時(shí)把A放入一級(jí)緩存
  5. 最后,一級(jí)緩存中保存著實(shí)例化、初始化都完成的A、B對(duì)象

解釋 Spring 支持的幾種 bean 的作用域。

Spring 框架支持以下五種 bean 的作用域:

  • singleton : bean 在每個(gè) Spring ioc 容器中只有一個(gè)實(shí)例。
  • prototype:一個(gè) bean 的定義可以有多個(gè)實(shí)例。
  • request:每次 http 請(qǐng)求都會(huì)創(chuàng)建一個(gè) bean,該作用域僅在基于 web的 Spring ApplicationContext 情形下有效。
  • session:在一個(gè) HTTP Session 中,一個(gè) bean 定義對(duì)應(yīng)一個(gè)實(shí)例。該作用域僅在基于 web 的 Spring ApplicationContext 情形下有效。
  • global-session:在一個(gè)全局的 HTTP Session 中,一個(gè) bean 定義對(duì)應(yīng)一個(gè)實(shí)例。該作用域僅在基于 web 的 Spring ApplicationContext 情形下有效。缺省的 Spring bean 的作用域是 Singleton.

BeanFactory 和 ApplicationContext 的區(qū)別

BeanFactoryApplicationContext 都是 Spring 框架提供的 IOC 容器,分別代表了基礎(chǔ)的 IOC 容器和高級(jí)的 IOC 容器。ApplicationContextBeanFactory 的子接口,繼承了 BeanFactory 的所有功能,并在此基礎(chǔ)上提供了更多擴(kuò)展性的服務(wù)。

二、BeanFactory

  • 基本概念BeanFactory 是 Spring 框架中最基礎(chǔ)的 IOC 容器,它負(fù)責(zé)讀取 bean 配置文檔,管理 bean 的加載與實(shí)例化,并控制 bean 的生命周期及維護(hù) bean 間的依賴關(guān)系。
  • 加載機(jī)制BeanFactory 采用延遲加載機(jī)制,即在真正使用某個(gè) bean 時(shí)(通過(guò) getBean() 方法調(diào)用)才會(huì)對(duì)其進(jìn)行加載和實(shí)例化。
  • 創(chuàng)建方式BeanFactory 通常通過(guò)編程方式創(chuàng)建。

三、ApplicationContext

  • 高級(jí)特性ApplicationContextBeanFactory 的基礎(chǔ)上增加了許多高級(jí)功能,例如國(guó)際化支持、資源文件訪問(wèn)、事件發(fā)布機(jī)制等。
  • 加載機(jī)制ApplicationContext 在容器啟動(dòng)時(shí),會(huì)一次性創(chuàng)建所有非懶加載的 bean。
  • 創(chuàng)建方式:除了支持編程式創(chuàng)建之外,ApplicationContext 還支持聲明式創(chuàng)建。
  • 擴(kuò)展功能
    • 繼承 MessageSource 接口,支持國(guó)際化。
    • 提供統(tǒng)一的資源文件訪問(wèn)方式。
    • 支持在監(jiān)聽(tīng)器中注冊(cè) bean 的事件。
    • 允許同時(shí)加載多個(gè)配置文件。
    • 能夠載入具有繼承關(guān)系的多個(gè)上下文,使每個(gè)上下文專注于特定的層次(如 Web 層)。
      四、BeanPostProcessor 和 BeanFactoryPostProcessor 的使用
  • BeanFactory 需要手動(dòng)注冊(cè) BeanPostProcessorBeanFactoryPostProcessor。
  • ApplicationContext 則自動(dòng)注冊(cè) BeanPostProcessorBeanFactoryPostProcessor。

框架中都用到了哪些設(shè)計(jì)模式?

  1. 工廠模式:BeanFactory就是簡(jiǎn)單工廠模式的體現(xiàn),用來(lái)創(chuàng)建對(duì)象的實(shí)例;

  2. 單例模式:Bean默認(rèn)為單例模式。

  3. 代理模式:Spring的AOP功能用到了JDK的動(dòng)態(tài)代理和CGLIB字節(jié)碼生成技術(shù);

  4. 模板方法:用來(lái)解決代碼重復(fù)的問(wèn)題。比如.JdbcTemplate

  5. 觀察者模式:ApplicationListener。

  6. 適配器模式:Aop中,使用Advice(通知)來(lái)增強(qiáng)被代理類的功能

使用@Autowired 注解自動(dòng)裝配的過(guò)程是怎樣的?

使用@Autowired 注解來(lái)自動(dòng)裝配指定的 bean。在使用@Autowired 注解之前需要在 Spring 配置文件進(jìn)行配置。

在啟動(dòng) spring IoC 時(shí),容器自動(dòng)裝載了一個(gè) AutowiredAnnotationBeanPostProcessor 后置處理器,

當(dāng)容器掃描到@Autowied、@Resource 或@Inject 時(shí),就會(huì)在 IoC 容器自動(dòng)查找需要的 bean,并裝配給該對(duì)象的屬性。在使用@Autowired 時(shí),首先在容器中查詢對(duì)應(yīng)類型的 bean:

? 如果查詢結(jié)果剛好為一個(gè),就將該 bean 裝配給@Autowired 指定的數(shù)據(jù);

? 如果查詢的結(jié)果不止一個(gè),那么@Autowired 會(huì)根據(jù)名稱來(lái)查找;

? 如果上述查找的結(jié)果為空,那么會(huì)拋出異常。解決方法時(shí),使用 required=false。

后面看看會(huì)針對(duì)一些比較常見(jiàn)重要的問(wèn)題進(jìn)行更新,今天就到這,總結(jié)總結(jié),希望大家一起成長(zhǎng)

http://www.risenshineclean.com/news/57631.html

相關(guān)文章:

  • win7本機(jī)做網(wǎng)站微信朋友圈廣告在哪里做
  • 做鋼化膜網(wǎng)站長(zhǎng)沙seo優(yōu)化
  • 大連裝修公司哪家口碑最好深圳搜索引擎優(yōu)化收費(fèi)
  • 知道ip域名如何進(jìn)入網(wǎng)站如何推廣一款app
  • 愛(ài)潤(rùn)妍網(wǎng)站開(kāi)發(fā)河南企業(yè)網(wǎng)站推廣
  • 室內(nèi)設(shè)計(jì)畢業(yè)設(shè)計(jì)代做網(wǎng)站seo是搜索引擎營(yíng)銷
  • 重慶大渡口營(yíng)銷型網(wǎng)站建設(shè)公司哪家專業(yè)win7系統(tǒng)優(yōu)化軟件
  • 公司做網(wǎng)站費(fèi)用上海seo網(wǎng)站策劃
  • 柳北網(wǎng)站制作網(wǎng)上推廣賺錢項(xiàng)目
  • 惠州網(wǎng)站建設(shè) 英語(yǔ)太原百度網(wǎng)站快速排名
  • 免費(fèi)網(wǎng)站訪客qq統(tǒng)計(jì)系統(tǒng)今日最新聞
  • 靈山網(wǎng)站建設(shè)seo點(diǎn)擊排名軟件哪里好
  • 淘寶客怎樣做網(wǎng)站網(wǎng)站優(yōu)化推廣
  • 網(wǎng)站平臺(tái)延展性網(wǎng)站優(yōu)化與seo
  • 網(wǎng)站機(jī)房建設(shè)解決方案搜索優(yōu)化是什么意思
  • 響應(yīng)式網(wǎng)站咨詢域名關(guān)鍵詞查詢
  • java做直播網(wǎng)站有哪些網(wǎng)推
  • 2_ 如何寫一份詳細(xì)的網(wǎng)站開(kāi)發(fā)方案鄭州seo代理外包公司
  • 長(zhǎng)春專業(yè)網(wǎng)站建設(shè)價(jià)格seo核心技術(shù)排名
  • 淄博網(wǎng)站建設(shè)方案免費(fèi)制作網(wǎng)站app
  • 企業(yè)門戶網(wǎng)站云服務(wù)器配置要求seo整站優(yōu)化方案案例
  • 軟件怎么做出來(lái)的長(zhǎng)沙做優(yōu)化的公司
  • 電子商務(wù)網(wǎng)站開(kāi)發(fā)的意義東莞seo排名外包
  • 如何將vs做的網(wǎng)站備份出來(lái)6購(gòu)買鏈接怎么買
  • 隨州網(wǎng)站制作價(jià)格百度商業(yè)平臺(tái)
  • 網(wǎng)站標(biāo)題組合百度400電話
  • 國(guó)家建設(shè)部查詢網(wǎng)站北京優(yōu)化靠譜的公司
  • 網(wǎng)站是哪家公司做的站長(zhǎng)之家seo查詢官方網(wǎng)站
  • 網(wǎng)站網(wǎng)站集約化建設(shè)市場(chǎng)調(diào)研與分析
  • 山東網(wǎng)站制作推薦跨境電商培訓(xùn)