最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring容器-BeanFactory和ApplicationContext使用詳解

 更新時(shí)間:2023年04月24日 08:53:34   作者:郝學(xué)勝  
這篇文章主要為大家介紹了Spring容器-BeanFactory和ApplicationContext的使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

將BeanFactory和ApplicationContext作為容器使用

在Spring中,BeanFactory和ApplicationContext是容器的兩種實(shí)現(xiàn)方式,可以使用它們來(lái)管理對(duì)象的生命周期以及實(shí)現(xiàn)依賴注入等功能。下面我們來(lái)分別演示一下BeanFactory和ApplicationContext子類(lèi)的使用方式。

BeanFactory容器

BeanFactory是Spring容器中最基本的接口,它提供了定義和管理bean的基本方式。使用BeanFactory容器的步驟如下:

1.定義一個(gè)Bean對(duì)象

public class HelloBean { 
   private String message; 
   public void setMessage(String message) { 
      this.message = message; 
   } 
   public void sayHello() { 
      System.out.println("Hello " + message); 
   } 
} 

2.在Spring的配置文件中聲明一個(gè)bean對(duì)象

<beans> 
    <bean id="helloBean" class="com.example.HelloBean"> 
        <property name="message" value="World" /> 
    </bean>
</beans>

3.使用BeanFactory容器獲取bean對(duì)象

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("beans.xml")); 
HelloBean helloBean = (HelloBean) beanFactory.getBean("helloBean"); 
helloBean.sayHello(); 

ApplicationContext容器

ApplicationContext是BeanFactory的子接口,它是Spring容器的另一種實(shí)現(xiàn)方式。和BeanFactory容器相比,ApplicationContext容器提供了更加豐富的功能,例如國(guó)際化支持、事件發(fā)布、資源管理等。使用ApplicationContext容器的步驟如下: 1.定義一個(gè)Bean對(duì)象

public class HelloBean { 
    private String message; 
    public void setMessage(String message) { 
       this.message = message; 
    } 
    public void sayHello() { 
       System.out.println("Hello " + message); 
    } 
} 

2.在Spring的配置文件中聲明一個(gè)bean對(duì)象

<beans> 
    <bean id="helloBean" class="com.example.HelloBean"> 
        <property name="message" value="World" />
    </bean>
</beans> 

3.使用ApplicationContext容器獲取bean對(duì)象

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); 
HelloBean helloBean = (HelloBean) applicationContext.getBean("helloBean"); 
helloBean.sayHello(); 

Spring內(nèi)嵌Web容器的過(guò)程

在Spring中,ApplicationContext容器有多個(gè)子類(lèi),其中包括了用于WEB開(kāi)發(fā)的子類(lèi)。這些子類(lèi)可以直接啟動(dòng)Tomcat、Jetty等Web容器,使得我們可以在不使用第三方Web容器的情況下,直接在Spring應(yīng)用內(nèi)啟動(dòng)Web應(yīng)用。下面以SpringBoot的Web容器啟動(dòng)為例,來(lái)說(shuō)明ApplicationContext子類(lèi)的具體源代碼實(shí)現(xiàn)過(guò)程。 我們先來(lái)看一下SpringBoot的啟動(dòng)類(lèi):

@SpringBootApplication 
public class Application { 
    public static void main(String[] args) { 
       SpringApplication.run(Application.class, args); 
    } 
} 

在這個(gè)啟動(dòng)類(lèi)中,我們使用了SpringBoot提供的@SpringBootApplication注解。這個(gè)注解是一個(gè)組合注解,包含了多個(gè)其他注解,其中一個(gè)注解就是@Import({ ServletWebServerFactoryAutoConfiguration.class, WebMvcAutoConfiguration.class })。這個(gè)注解的作用是向Spring容器中注冊(cè)兩個(gè)自動(dòng)配置類(lèi):ServletWebServerFactoryAutoConfiguration和WebMvcAutoConfiguration。

接著我們來(lái)看一下ServletWebServerFactoryAutoConfiguration這個(gè)類(lèi):

@Configuration(proxyBeanMethods = false)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
@ConditionalOnWebApplication(type = Type.SERVLET)
@ConditionalOnClass(Servlet.class)
@ConditionalOnMissingBean(value = { ServletWebServerFactory.class, WebServerFactoryCustomizerBeanPostProcessor.class })
public class ServletWebServerFactoryAutoConfiguration {
    @Bean
    public ServletWebServerFactoryCustomizer servletWebServerFactoryCustomizer(
            ObjectProvider<WebServerFactoryCustomizerBeanPostProcessor> webServerFactoryCustomizerBeanPostProcessor) {
        return new ServletWebServerFactoryCustomizer(
                webServerFactoryCustomizerBeanPostProcessor.getIfAvailable(Collections::emptyList));
    }
    @Bean
    @ConditionalOnMissingBean
    public TomcatServletWebServerFactory tomcatServletWebServerFactory(
            ObjectProvider<TomcatConnectorCustomizer> connectorCustomizers,
            ObjectProvider<TomcatContextCustomizer> contextCustomizers, Environment environment) {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.setEnvironment(environment);
        factory.setTomcatConnectorCustomizers(connectorCustomizers.orderedStream().collect(Collectors.toList()));
        factory.setTomcatContextCustomizers(contextCustomizers.orderedStream().collect(Collectors.toList()));
        return factory;
    }
}

可以看到,這個(gè)類(lèi)標(biāo)記為@Configuration注解,表示它是一個(gè)配置類(lèi)。這個(gè)類(lèi)提供了TomcatServletWebServerFactory這個(gè)bean定義,它利用Tomcat作為Web容器。這個(gè)類(lèi)還提供了一個(gè)servletWebServerFactoryCustomizer的bean定義,它會(huì)在Web容器啟動(dòng)前對(duì)Web容器進(jìn)行自定義的配置。

除了ServletWebServerFactoryAutoConfiguration之外,還有一些其他的自動(dòng)配置類(lèi)。例如:

  • HttpEncodingAutoConfiguration:自動(dòng)配置請(qǐng)求和響應(yīng)的編碼過(guò)濾器。
  • DispatcherServletAutoConfiguration:自動(dòng)配置一個(gè)DispatcherServlet,它用于處理Web請(qǐng)求。

在SpringBoot啟動(dòng)時(shí),會(huì)將這些自動(dòng)配置類(lèi)都加載到Spring容器中。最終,我們就可以使用ApplicationContext容器來(lái)獲取Web容器實(shí)例,代碼如下:

@Bean
public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer() {
    int port = environment.getProperty("server.port", Integer.class, 8080);
    return factory -> {
        factory.setPort(port);
    };
}
@Bean
public ServletWebServerFactory servletContainer() {
    return applicationContext.getBean(ServletWebServerFactory.class);
}

可以看到,這個(gè)代碼中直接調(diào)用了ApplicationContext容器的getBean方法,來(lái)獲取ServletWebServerFactory這個(gè)bean實(shí)例。

以上就是一個(gè)簡(jiǎn)單的說(shuō)明Spring內(nèi)嵌Web容器的過(guò)程。在實(shí)際的項(xiàng)目中,我們也可以使用ApplicationContext容器來(lái)啟動(dòng)其他的Web容器,例如Jetty等??偟膩?lái)說(shuō),Spring內(nèi)嵌Web容器的使用非常的方便,適合于小型的Web應(yīng)用的快速開(kāi)發(fā)。

以上就是Spring容器-BeanFactory和ApplicationContext使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Spring BeanFactory ApplicationContext的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring之InitializingBean接口和DisposableBean接口的使用

    Spring之InitializingBean接口和DisposableBean接口的使用

    這篇文章主要介紹了Spring之InitializingBean接口和DisposableBean接口的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • java中String,數(shù)組,ArrayList三者之間的轉(zhuǎn)換

    java中String,數(shù)組,ArrayList三者之間的轉(zhuǎn)換

    這篇文章主要介紹了java中String,數(shù)組,ArrayList三者之間的轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Mybatis自定義攔截器實(shí)現(xiàn)權(quán)限功能

    Mybatis自定義攔截器實(shí)現(xiàn)權(quán)限功能

    本文主要介紹了Mybatis自定義攔截器實(shí)現(xiàn)權(quán)限功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Java實(shí)現(xiàn)簡(jiǎn)單的郵件發(fā)送功能

    Java實(shí)現(xiàn)簡(jiǎn)單的郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單的郵件發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • SpringBoot使用Redis實(shí)現(xiàn)消息隊(duì)列的方法小結(jié)

    SpringBoot使用Redis實(shí)現(xiàn)消息隊(duì)列的方法小結(jié)

    在應(yīng)用中把Redis當(dāng)成消息隊(duì)列來(lái)使用已經(jīng)屢見(jiàn)不鮮了,我想主要原因是當(dāng)代應(yīng)用十有八九都會(huì)用到 Redis,因此不用再引入其他消息隊(duì)列系統(tǒng),而且Redis提供了好幾種實(shí)現(xiàn)消息隊(duì)列的方法,用起來(lái)也簡(jiǎn)單,本文給大家介紹了SpringBoot使用Redis實(shí)現(xiàn)消息隊(duì)列的方法小結(jié)
    2024-04-04
  • 如何使用Spring自定義Xml標(biāo)簽

    如何使用Spring自定義Xml標(biāo)簽

    要實(shí)現(xiàn)自定義的xml配置,需要有兩個(gè)默認(rèn)spring配置文件來(lái)支持。一個(gè)是spring.schemas,一個(gè)是spring.handlers,前者是為了驗(yàn)證你自定義的xml配置文件是否符合你的格式要求,后者是告訴spring該如何來(lái)解析你自定義的配置文件。本文將介紹如何使用Spring自定義Xml標(biāo)簽
    2021-06-06
  • Java泛型和Class類(lèi)用法示例

    Java泛型和Class類(lèi)用法示例

    這篇文章主要介紹了Java泛型和Class類(lèi)用法,結(jié)合實(shí)例形式分析了java使用泛型限制class類(lèi)避免強(qiáng)制類(lèi)型轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • SpringBoot接入deepseek深度求索示例代碼(jdk1.8)

    SpringBoot接入deepseek深度求索示例代碼(jdk1.8)

    這篇文章主要介紹了SpringBoot接入deepseek深度求索的相關(guān)資料,包括建API?key、封裝詢問(wèn)Deepseek的工具方法(在配置文件中添加key值)、調(diào)用測(cè)試并確保端口一致例如8091,最后運(yùn)行結(jié)果,需要的朋友可以參考下
    2025-02-02
  • SpringBoot中使用MyBatis-Plus詳細(xì)步驟

    SpringBoot中使用MyBatis-Plus詳細(xì)步驟

    MyBatis-Plus是MyBatis的增強(qiáng)工具,簡(jiǎn)化了MyBatis的使用,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 一文搞懂Spring?Security異常處理機(jī)制

    一文搞懂Spring?Security異常處理機(jī)制

    這篇文章主要為大家詳細(xì)介紹一下Spring?Security異常處理機(jī)制,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Spring?Security有一定幫助,感興趣的可以學(xué)習(xí)一下
    2022-07-07

最新評(píng)論

和静县| 靖安县| 五指山市| 屯留县| 治县。| 迁西县| 南漳县| 鹤庆县| 政和县| 调兵山市| 林口县| 朝阳县| 蛟河市| 邮箱| 炉霍县| 南召县| 泰州市| 杭锦旗| 宁陕县| 新安县| 沙田区| 名山县| 江西省| 华宁县| 汪清县| 德兴市| 海南省| 综艺| 彭山县| 柘荣县| 九龙县| 额敏县| 阜新| 海淀区| 新营市| 太原市| 息烽县| 大竹县| 驻马店市| 裕民县| 富宁县|