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

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

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

BeanFactory與ApplicationContext關(guān)系的分析

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

ApplicationContext繼承的接口與功能

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

BeanFactory應(yīng)用代碼示例

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是一個(gè)用于從classpath中加載資源文件的類。XmlBeanFactory是Spring提供的一個(gè)實(shí)現(xiàn)了BeanFactory接口的IoC容器實(shí)例。在實(shí)例化XmlBeanFactory時(shí),需要提供一個(gè)Resource對(duì)象,這里傳入的是spring-config.xml文件。

ApplicationContext各功能的應(yīng)用代碼示例

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

這段示例代碼通過(guò)ApplicationContext實(shí)例化了一個(gè)ResourceLoader對(duì)象,然后通過(guò)getResource方法加載了"classpath:test.txt"文件。這個(gè)文件在classpath路徑下,所以可以使用 classpath: 前綴來(lái)定位文件。

MessageSource 接口的示例

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

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

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

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

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

ApplicationEventPublisher 接口的示例

我們可以在啟動(dòng)時(shí)發(fā)布一個(gè)事件:

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

當(dāng)程序成功運(yùn)行時(shí),我們可以看到輸出了 MyApplicationEvent received! 的信息。

EnvironmentCapable 接口的示例

這個(gè)接口用于獲取當(dāng)前運(yùn)行的環(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接口示例

這個(gè)接口中提供了一些批量操作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接口示例

這個(gè)接口用于完成Bean的自動(dòng)裝配:

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接口示例

這個(gè)接口用于注冊(cè)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()); 
    } 
} 

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

ConfigurableApplicationContext接口示例

這個(gè)接口用于修改bean定義、激活環(huán)境、注冊(cè)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()); 
   } 
}

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

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

相關(guān)文章

  • 深入了解Java定時(shí)器中的Timer的原理

    深入了解Java定時(shí)器中的Timer的原理

    這篇文章主要介紹了Java定時(shí)器中的Timer的原理。Timer主要用于Java線程里指定時(shí)間或周期運(yùn)行任務(wù),它是線程安全的,但不提供實(shí)時(shí)性(real-time)保證。接下來(lái)就跟隨小編一起深入了解Timer吧
    2022-01-01
  • IDEA?Error:java:無(wú)效的源發(fā)行版:13的解決過(guò)程

    IDEA?Error:java:無(wú)效的源發(fā)行版:13的解決過(guò)程

    之前用idea運(yùn)行時(shí),也會(huì)出現(xiàn)這種情況,后面通過(guò)網(wǎng)上的資料解決了這個(gè)問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于IDEA?Error:java:無(wú)效的源發(fā)行版:13的解決過(guò)程,需要的朋友可以參考下
    2023-01-01
  • SpringBoot整合MyBatisPlus詳解

    SpringBoot整合MyBatisPlus詳解

    這篇文章詳細(xì)介紹了SpringBoot整合mybatisplus的全過(guò)程,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2023-04-04
  • Java String 字符串常量池解析

    Java String 字符串常量池解析

    這篇文章主要介紹了Java String 字符串常量池解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • springboot關(guān)閉druid監(jiān)控 druid2改配置文件無(wú)效的解決

    springboot關(guān)閉druid監(jiān)控 druid2改配置文件無(wú)效的解決

    這篇文章主要介紹了springboot關(guān)閉druid監(jiān)控 druid2改配置文件無(wú)效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 深入探究Java線程的狀態(tài)與生命周期

    深入探究Java線程的狀態(tài)與生命周期

    在java中,任何對(duì)象都要有生命周期,線程也不例外,它也有自己的生命周期。線程的整個(gè)生命周期可以分為5個(gè)階段,分別是新建狀態(tài)、就緒狀態(tài)、運(yùn)行狀態(tài)、阻塞狀態(tài)和死亡狀態(tài)
    2022-04-04
  • 一文掌握J(rèn)ava的工具類和API

    一文掌握J(rèn)ava的工具類和API

    在Java中,工具類通常包含一系列靜態(tài)方法,用于執(zhí)行常見(jiàn)的任務(wù),這些任務(wù)可能不直接關(guān)聯(lián)到特定的業(yè)務(wù)邏輯,而是用于處理一些基礎(chǔ)的數(shù)據(jù)轉(zhuǎn)換、字符串操作、文件操作等,這篇文章主要介紹了一文搞懂Java的工具類和API,需要的朋友可以參考下
    2008-01-01
  • MyBatis?Generator快速生成實(shí)體類和映射文件的方法

    MyBatis?Generator快速生成實(shí)體類和映射文件的方法

    這篇文章主要介紹了MyBatis?Generator快速生成實(shí)體類和映射文件的方法,通過(guò)示例代碼介紹了MyBatis?Generator?的使用,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • Java日期操作類常見(jiàn)用法示例

    Java日期操作類常見(jiàn)用法示例

    這篇文章主要介紹了Java日期操作類常見(jiàn)用法,結(jié)合實(shí)例形式分析了java針對(duì)日期時(shí)間的獲取、轉(zhuǎn)換常見(jiàn)操作技巧,需要的朋友可以參考下
    2019-07-07
  • 解決java.util.NoSuchElementException異常的問(wèn)題

    解決java.util.NoSuchElementException異常的問(wèn)題

    這篇文章主要介紹了解決java.util.NoSuchElementException異常的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09

最新評(píng)論

蕉岭县| 会宁县| 晋宁县| 筠连县| 山东省| 阿克陶县| 大荔县| 许昌市| 罗甸县| 五指山市| 宝应县| 简阳市| 安宁市| 库尔勒市| 滁州市| 竹溪县| 光泽县| 隆昌县| 弥渡县| 黔西| 手游| 合肥市| 清水河县| 鹤岗市| 余江县| 涪陵区| 柏乡县| 拉孜县| 增城市| 五常市| 申扎县| 清水河县| 大理市| 青冈县| 施甸县| 泌阳县| 阳城县| 阳江市| 肥东县| 年辖:市辖区| 平乐县|