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

Spring容器-BeanFactory和ApplicationContext使用詳解

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

將BeanFactory和ApplicationContext作為容器使用

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

BeanFactory容器

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

1.定義一個Bean對象

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

2.在Spring的配置文件中聲明一個bean對象

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

3.使用BeanFactory容器獲取bean對象

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

ApplicationContext容器

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

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

2.在Spring的配置文件中聲明一個bean對象

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

3.使用ApplicationContext容器獲取bean對象

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

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

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

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

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

接著我們來看一下ServletWebServerFactoryAutoConfiguration這個類:

@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;
    }
}

可以看到,這個類標記為@Configuration注解,表示它是一個配置類。這個類提供了TomcatServletWebServerFactory這個bean定義,它利用Tomcat作為Web容器。這個類還提供了一個servletWebServerFactoryCustomizer的bean定義,它會在Web容器啟動前對Web容器進行自定義的配置。

除了ServletWebServerFactoryAutoConfiguration之外,還有一些其他的自動配置類。例如:

  • HttpEncodingAutoConfiguration:自動配置請求和響應的編碼過濾器。
  • DispatcherServletAutoConfiguration:自動配置一個DispatcherServlet,它用于處理Web請求。

在SpringBoot啟動時,會將這些自動配置類都加載到Spring容器中。最終,我們就可以使用ApplicationContext容器來獲取Web容器實例,代碼如下:

@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);
}

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

以上就是一個簡單的說明Spring內(nèi)嵌Web容器的過程。在實際的項目中,我們也可以使用ApplicationContext容器來啟動其他的Web容器,例如Jetty等??偟膩碚f,Spring內(nèi)嵌Web容器的使用非常的方便,適合于小型的Web應用的快速開發(fā)。

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

相關文章

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

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

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

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

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

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

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

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

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

    SpringBoot使用Redis實現(xiàn)消息隊列的方法小結

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

    如何使用Spring自定義Xml標簽

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

    Java泛型和Class類用法示例

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

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

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

    SpringBoot中使用MyBatis-Plus詳細步驟

    MyBatis-Plus是MyBatis的增強工具,簡化了MyBatis的使用,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 一文搞懂Spring?Security異常處理機制

    一文搞懂Spring?Security異常處理機制

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

最新評論

民权县| 四平市| 新余市| 濉溪县| 莱州市| 临城县| 石渠县| 商河县| 华亭县| 福州市| 前郭尔| 错那县| 西吉县| 建昌县| 高清| 阜平县| 永德县| 金沙县| 清丰县| 集贤县| 丰顺县| 广东省| 周至县| 泸溪县| 濮阳市| 昭觉县| 张家口市| 平和县| 巴彦县| 巴马| 随州市| 巴塘县| 屏边| 革吉县| 确山县| 贵德县| 桃园市| 昭平县| 昆山市| 南华县| 麦盖提县|