亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring容器BeanFactory和ApplicationContext怎么使用

發布時間:2023-05-05 15:49:08 來源:億速云 閱讀:113 作者:iii 欄目:開發技術

這篇“Spring容器BeanFactory和ApplicationContext怎么使用”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Spring容器BeanFactory和ApplicationContext怎么使用”文章吧。

    將BeanFactory和ApplicationContext作為容器使用

    在Spring中,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容器的另一種實現方式。和BeanFactory容器相比,ApplicationContext容器提供了更加豐富的功能,例如國際化支持、事件發布、資源管理等。使用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內嵌Web容器的過程

    在Spring中,ApplicationContext容器有多個子類,其中包括了用于WEB開發的子類。這些子類可以直接啟動Tomcat、Jetty等Web容器,使得我們可以在不使用第三方Web容器的情況下,直接在Spring應用內啟動Web應用。下面以SpringBoot的Web容器啟動為例,來說明ApplicationContext子類的具體源代碼實現過程。 我們先來看一下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);
    }

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

    以上就是關于“Spring容器BeanFactory和ApplicationContext怎么使用”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    三台县| 进贤县| 义马市| 邵武市| 大田县| 乐业县| 柳河县| 神农架林区| 菏泽市| 民和| 绵阳市| 莆田市| 延津县| 西贡区| 维西| 易门县| 清镇市| 昌江| 左贡县| 桐梓县| 甘孜| 邢台县| 古浪县| 信阳市| 潮安县| 德昌县| 嵩明县| 彭州市| 宜都市| 铜陵市| 龙井市| 昆山市| 洮南市| 文安县| 万山特区| 乌鲁木齐市| 长治县| 南和县| 平利县| 新乡县| 和硕县|