欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文學透ApplicationContext繼承接口功能及與BeanFactory區(qū)別

 更新時間:2023年04月23日 09:32:57   作者:郝學勝  
這篇文章主要為大家介紹了ApplicationContext繼承接口功能及與BeanFactory區(qū)別示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

BeanFactory與ApplicationContext關系的分析

BeanFactory是Spring中最基本的接口,它是Spring IoC容器中最底層的接口,提供了IoC容器最基本的形式,它具有最基本的 IoC 功能,負責管理 Spring Bean 的生命周期,通過 BeanFactory 可以獲取指定 Bean 的實例。 ApplicationContext是BeanFactory的子接口,ApplicationContext繼承了BeanFactory接口的全部功能,同時還提供了其他的一些功能。ApplicationContext是Spring中最重要的接口之一,它是Spring容器的具體實現(xiàn),在BeanFactory的基礎上添加了一些更加實用的功能,比如資源加載、事件發(fā)布、AOP和事務等。 因此,可以認為ApplicationContext繼承了BeanFactory,擁有了更多的功能和擴展性。

ApplicationContext繼承的接口與功能

  • ResourceLoader:加載資源文件
  • MessageSource:國際化消息的源頭
  • ApplicationEventPublisher:應用事件發(fā)布
  • EnvironmentCapable:獲取當前應用的環(huán)境信息
  • ListableBeanFactory:提供了批量操作Bean的方法
  • HierarchicalBeanFactory:層次性的BeanFactory,支持子容器
  • AutowireCapableBeanFactory:Bean自動裝配的BeanFactory
  • BeanDefinitionRegistry:定義和注冊BeanDefinition的接口
  • ConfigurableApplicationContext:ApplicationContext可配置的接口,對外提供了修改bean定義、激活環(huán)境、注冊shut-down hook等能力。

BeanFactory應用代碼示例

public class TestBean { 
    private String name; 
    public TestBean() { 
       System.out.println("constructor of TestBean is invoked"); 
    } 
    public void setName(String name) { 
       this.name = name; 
    } 
    public String getName() { 
       return name; 
    } 
} 
public class BeanFactoryExample { 
    public static void main(String[] args) { 
        Resource resource = new ClassPathResource("spring-config.xml"); 
        BeanFactory factory = new XmlBeanFactory(resource); 
        TestBean testBean = (TestBean) factory.getBean("testBean"); 
        System.out.println("The name is : " + testBean.getName()); 
    } 
} 

其中,ClassPathResource是一個用于從classpath中加載資源文件的類。XmlBeanFactory是Spring提供的一個實現(xiàn)了BeanFactory接口的IoC容器實例。在實例化XmlBeanFactory時,需要提供一個Resource對象,這里傳入的是spring-config.xml文件。

ApplicationContext各功能的應用代碼示例

ResourceLoader 接口的示例

public class ResourceLoaderExample { 
     public static void main(String[] args) throws IOException { 
         ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); 
         ResourceLoader loader = context; 
         Resource resource = loader.getResource("classpath:test.txt"); 
         InputStream inputStream = resource.getInputStream(); 
         BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); 
         String line; 
         while ((line = reader.readLine()) != null) { 
            System.out.println(line); 
         } 
         reader.close(); 
    } 
} 

這段示例代碼通過ApplicationContext實例化了一個ResourceLoader對象,然后通過getResource方法加載了"classpath:test.txt"文件。這個文件在classpath路徑下,所以可以使用 classpath: 前綴來定位文件。

MessageSource 接口的示例

首先,需要在Spring配置文件中定義一個資源文件:

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basename" value="messages" />
</bean> 

然后,在Java代碼中使用注入方式獲取 MessageSource 實例:

public class MessageSourceExample { 
    public static void main(String[] args) { 
       ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); 
       MessageSource messageSource = (MessageSource) context.getBean("messageSource");
       String message = messageSource.getMessage("test", null, Locale.getDefault());
       System.out.println("The message is : " + message); 
    } 
} 

這個示例代碼中,我們通過 messageSource.getMessage("test", null, Locale.getDefault()) 方法根據(jù)當前默認的語言獲取了 messages.propertiestest 屬性的值。

ApplicationEventPublisher 接口的示例

我們可以在啟動時發(fā)布一個事件:

public class MyApplicationEvent extends ApplicationEvent { 
     public MyApplicationEvent(Object source) { 
         super(source); 
     } 
} 
public class PublishEventExample { 
     public static void main(String[] args) { 
         ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); 
         context.addApplicationListener(new ApplicationListener<MyApplicationEvent>() {
             @Override 
             public void onApplicationEvent(MyApplicationEvent event) {
                 System.out.println("MyApplicationEvent received!"); 
             } 
         }); 
         context.publishEvent(new MyApplicationEvent("Hello World!")); 
         context.close(); 
   } 
} 

當程序成功運行時,我們可以看到輸出了 MyApplicationEvent received! 的信息。

EnvironmentCapable 接口的示例

這個接口用于獲取當前運行的環(huán)境信息:

public class EnvironmentExample { 
    public static void main(String[] args) { 
         ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); 
         Environment environment = context.getEnvironment(); 
         System.out.println("The environment is : " + environment.getProperty("os.name")); 
    } 
} 

ListableBeanFactory接口示例

這個接口中提供了一些批量操作Bean的方法:

public class ListableBeanFactoryExample { 
    public static void main(String[] args) { 
       ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); 
       ListableBeanFactory beanFactory = context.getBeanFactory(); 
       String[] beanNames = beanFactory.getBeanDefinitionNames(); 
       for (String beanName : beanNames) { 
           System.out.println(beanName); 
       } 
   } 
} 

AutowireCapableBeanFactory接口示例

這個接口用于完成Bean的自動裝配:

public class AutowireCapableBeanFactoryExample { 
    public static void main(String[] args) { 
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); 
        AutowireCapableBeanFactory beanFactory = context.getAutowireCapableBeanFactory();
        TestBean testBean = new TestBean(); 
        beanFactory.autowireBean(testBean); 
        System.out.println("The name is : " + testBean.getName()); 
    } 
} 

BeanDefinitionRegistry接口示例

這個接口用于注冊Bean:

public class BeanDefinitionRegistryExample { 
    public static void main(String[] args) { 
        XmlBeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("spring-config.xml")); 
        BeanDefinitionRegistry registry = (BeanDefinitionRegistry) beanFactory;
        BeanDefinition beanDefinition = new RootBeanDefinition(TestBean.class); 
        registry.registerBeanDefinition("testBean", beanDefinition); 
        TestBean testBean = (TestBean) beanFactory.getBean("testBean");
        System.out.println("The name is : " + testBean.getName()); 
    } 
} 

這個示例代碼中,我們通過 BeanDefinitionRegistry 接口實現(xiàn)了向容器注冊 TestBean 的過程。

ConfigurableApplicationContext接口示例

這個接口用于修改bean定義、激活環(huán)境、注冊shut-down hook等能力:

public class ConfigurableApplicationContextExample { 
    public static void main(String[] args) { 
       ConfigurableApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); 
       ConfigurableEnvironment environment = context.getEnvironment(); 
       environment.setActiveProfiles("dev"); 
       context.refresh(); 
       TestBean testBean = (TestBean) context.getBean("testBean"); 
       System.out.println("The name is : " + testBean.getName()); 
   } 
}

在這個示例代碼中,我們通過 ConfigurableApplicationContext 接口修改了當前的運行環(huán)境,激活了dev配置文件并重新刷新了容器,然后獲取了 testBean 的實例并輸出它的名稱。

以上就是一文學透ApplicationContext繼承接口功能及與BeanFactory區(qū)別的詳細內容,更多關于ApplicationContext BeanFactory繼承接口的資料請關注腳本之家其它相關文章!

相關文章

  • Springboot整合mqtt服務的示例代碼

    Springboot整合mqtt服務的示例代碼

    MQTT是一個基于客戶端-服務器的消息發(fā)布/訂閱傳輸協(xié)議。MQTT協(xié)議是輕量、簡單、開放和易于實現(xiàn)的,這些特點使它適用范圍非常廣泛。本文為大家分享了Springboot整合mqtt服務的示例代碼,需要的可以參考一下
    2022-03-03
  • 解決SpringBoot返回結果如果為null或空值不顯示處理問題

    解決SpringBoot返回結果如果為null或空值不顯示處理問題

    這篇文章主要介紹了解決SpringBoot返回結果如果為null或空值不顯示處理問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot + openFeign實現(xiàn)遠程接口調用的過程

    SpringBoot + openFeign實現(xiàn)遠程接口調用的過程

    現(xiàn)在的微服務項目不少都使用的是springboot+spring cloud構建的項目,微服務之間的調用都離不開feign來進行遠程調用,這篇文章主要介紹了SpringBoot + openFeign實現(xiàn)遠程接口調用,需要的朋友可以參考下
    2022-11-11
  • SpringBoot實現(xiàn)動態(tài)加載外部Jar流程詳解

    SpringBoot實現(xiàn)動態(tài)加載外部Jar流程詳解

    這篇文章主要介紹了SpringBoot動態(tài)加載外部Jar的流程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-05-05
  • Java 多線程有序執(zhí)行的幾種方法總結

    Java 多線程有序執(zhí)行的幾種方法總結

    這篇文章主要介紹了Java 多線程有序執(zhí)行的幾種方法總結的相關資料,需要的朋友可以參考下
    2017-03-03
  • SpringBoot項目中org.junit.jupiter.api.Test報錯問題及解決

    SpringBoot項目中org.junit.jupiter.api.Test報錯問題及解決

    這篇文章主要介紹了SpringBoot項目中org.junit.jupiter.api.Test報錯問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 五分鐘解鎖springboot admin監(jiān)控新技巧

    五分鐘解鎖springboot admin監(jiān)控新技巧

    本文不會講如何搭建企業(yè)的運維監(jiān)控系統(tǒng),有興趣的可以去找找成熟的比如Zabbix、Prometheus,甚至比較簡單的Wgcloud都能滿足一定的需求,不在此贅述。本文講解如何使用Springboot admin對spring boot項目進行應用監(jiān)控,感興趣的朋友一起看看吧
    2021-06-06
  • IDEA導入geoserver項目的詳細步驟及注意事項

    IDEA導入geoserver項目的詳細步驟及注意事項

    由于GeoServer是基于Java開發(fā)的。因此在安裝之前,必須確保安裝了Java。本文給大家分享IDEA導入geoserver項目的詳細步驟及注意事項,感興趣的朋友一起看看吧
    2021-06-06
  • Spring Boot Web 靜態(tài)文件緩存處理的方法

    Spring Boot Web 靜態(tài)文件緩存處理的方法

    本篇文章主要介紹了Spring Boot Web 靜態(tài)文件緩存處理的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-02-02
  • java eclipse 整個項目或包查找只定字符串并替換操作

    java eclipse 整個項目或包查找只定字符串并替換操作

    這篇文章主要介紹了java eclipse 整個項目或包查找只定字符串并替換操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論