爪哇 2博客
 爪哇 2博客

弹簧 ApplicationContext

这是教程系列的16个部分中的12个:Spring ApplicationContext

教程内容:初学者春季教程

在本教程中,我们将学习什么是ApplicationContext以及如何访问它。

ApplicationContext:

ApplicationContext是用于向应用程序提供配置信息的中央接口。

ApplicationContext提供以下功能:

  • 从ListableBeanFactory继承的Bean工厂方法。这样可以避免应用程序使用单例。
  • 解决消息的能力,支持国际化。继承自MessageSource接口。
  • 以通用方式加载文件资源的能力。继承自ResourceLoader接口。
  • 发布事件的能力。实现必须提供注册事件侦听器的方法。
  • Inheritance from a parent 语境. Definitions in a descendant 语境 will always take priority. This means, for example, that a single parent 语境 can be used by an entire web application, while each servlet has its own child 语境 that is independent of that of any other servlet.

 ApplicationContext vs BeanFactory:

我们可以通过应用getBean方法从这两者中获取我们的bean.BeanFactory是ApplicationContext的子集,并且提供的功能较少,因此如果要使用全部功能,则可以使用ApplicationContext。

在Bean类中获取ApplicationContext:

为了访问ApplicationContext,我们应该在相应的Java 豆 中实现ApplicationContextAware接口。

ApplicationContextAware接口:

 It has a method,
1
2
3
4
5
 
上市 虚空 setApplicationContext(ApplicationContext applicationContext)
 
            抛出 BeansException
 
我们在应用程序中使用的ApplicationContext实现将调用此方法,并将具体对象传递给AppplicationContext。使用此工具,我们可以访问所有配置信息。

例如,当对象需要访问一组协作bean时,实现ApplicationContextAware接口是有意义的。请注意,仅出于bean查找目的,通过bean引用进行配置比实现此接口更可取。

This interface can also be implemented if an object needs access to file resources, i.e. wants to call getResource, wants to publish an application event, or requires access to the MessageSource. However, it is preferable to implement the more specific ResourceLoaderAware, ApplicationEventPublisherAware or MessageSourceAware interface in such a specific scenario.

弹簧 Application 语境 example:

有关在Eclipse IDE中配置spring的信息,请参阅  你好世界的例子

1.Country.java:

这是具有某些属性的简单pojo类,因此此处的国家具有Capital类的名称和对象。
在包下创建Country.java 组织 .arpit.javapostsforlearning将以下内容复制到Country.java中。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
组织 . Arpit . 爪哇 postsforlearning;
 
进口 组织 .弹簧框架. 豆子 .BeansException;
进口 组织 .弹簧框架.语境.ApplicationContext;
进口 组织 .弹簧框架.语境.ApplicationContextAware;
 
上市 国家 实施 ApplicationContextAware{
 
     国家的名字 ;
    ApplicationContext applicationContext;
    首都 首都;
    上市 getCountryName() {
        返回 国家的名字;
    }
 
    上市 虚空 setCountryName( 国家的名字) {
         这个 .国家的名字 = 国家的名字;
    }
 
    上市 虚空 setApplicationContext(ApplicationContext applicationContext)
             抛出 BeansException {
         这个 .applicationContext=applicationContext;
    }
 
    上市 getCapitalName( 首都BeanName)
    {
        首都=(首都) applicationContext.getBean(首都BeanName);
         首字母大写=首都.getCapitalName();
        返回 首字母大写;
    }
}
 

2,Capital.java

这也是简单的pojo类,具有一个称为“capitalName”.

在包下创建Capital.java 组织 .arpit.javapostsforlearning.java.Areave 国家类包含此类的对象。将以下内容复制到Capital.java中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
组织 . Arpit . 爪哇 postsforlearning;
 
上市 首都 {
 
     首字母大写;
 
    上市 getCapitalName() {
        返回 首字母大写;
    }
 
    上市 虚空 setCapitalName( 首字母大写) {
         这个 .首字母大写 = 首字母大写;
    }
}
 

4.ApplicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
< 豆子 xmlns ="http://www.springframework.org/schema/beans"
xmlns : si ="http://www.w3.org/2001/XMLSchema-instance" xmlns : 哎呀 ="http://www.springframework.org/schema/aop"
si :schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 
< ID =“国家” =“ 组织 .arpit.javapostsforlearning.Country” >
<属性 名称 =“国家的名字” ="印度"/>
</>
 
< ID =“首都” =“ 组织 .arpit.javapostsforlearning.Capital” >
<属性 名称 ="首字母大写" =“德里”/>
</>
</ 豆子 >
 

如您所见,该XML文件中的上述两个bean之间没有连接。我们正在使用getBean方法获取国家类别的对象,然后将资本类别的id传递给国家类别的getCapitalName方法。在getCapital方法中,我们有通过Spring容器由setApplicationContext方法初始化的ApplicationContext对象,因此在ApplicationContext对象的帮助下,我们正在调用getBean方法来初始化资本对象并从该对象获取capitalName。

4.ApplicationContextMain.java

此类包含主要功能。在包下创建ApplicationContextMain.java 组织 .arpit.javapostsforlearning将以下内容复制到ApplicationContextMain.java中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
  组织 . Arpit . 爪哇 postsforlearning;
 
进口 组织 .弹簧框架.语境.ApplicationContext;
进口 组织 .弹簧框架.语境.支持.ClassPathXmlApplicationContext;
 
上市 ApplicationContextMain{
 
    上市 静态的 虚空 主要 ([] args ) {
 
        ApplicationContext appContext = ClassPathXmlApplicationContext(“ ApplicationContext.xml”);
        国家 countryObj = (国家) appContext.getBean(“国家”);
         系统 ..打印(“资本名称:”+countryObj.getCapitalName(“首都”));
    }
}
 
您可以在这里注意到,我们使用ClassPathXmlApplicationContext在此处获取bean。获取bean的方法有多种。 你好世界的例子 我们已经使用XmlBeanFactory来获取bean。

5,运行

当您在应用程序上运行时,将得到以下输出。
1
2
3
 
印度's 首都 名称 : 新德里
 

那’关于Spring ApplicationContext的全部内容。


导入联系人

您可能还喜欢:

分享这个

作者

关注作者

相关文章

  • 6月24日

    弹簧或Spring Boot中没有任何类型的合格Bean

    在这篇文章中,我们将看到一个例外:没有合格的bean类型。异常是最不期望的,但是在使用Spring时可能会遇到异常。或Spring Boot。您是否收到以下异常:org.springframework.beans.factory.NoSuchBeanDefinitionException:没有任何合格的bean类型?如果是,让’看到了不同的原因。原因1:您忘记声明[…]

  • 6月17日

    弹簧 XML配置示例

    在本文中,我们将看到如何创建基于XML的Spring hello world XML配置示例。这是创建Spring XML配置示例的简单步骤。 1.创建一个简单的java maven项目。 2. Maven依赖项将spring和cglib maven依赖项放在pom.xml中。 [crayon-601f28a6598e4558427480 /]因此,您的pom.xml如下所示:[crayon-601f28a6598e9637553427 /] 3.创建Bean类[…]

  • 6月15日

    在春季将原型bean注入到Singleton 豆 中

    在这篇文章中,我们将看到如何在Spring中将原型​​bean作用域注入Singleton Instance中。这是春季面试中最常问到的问题之一。问题将原型bean注入到singleton 豆 时,原型bean的行为仍然像singleton 豆 。让’借助示例了解这一点。 1.创建一个[…]

  • 6月15日

    弹簧中的循环依赖

    在这篇文章中,我们将讨论春季面试中最常问到的问题之一。如果Spring中存在循环依赖关系,会发生什么情况。问题如果Spring中存在循环依赖关系怎么办?例如:A类需要B类的实例,而B类需要A类的实例。’创建一个示例[…]

  • 9月12日

    弹簧初始化方法和销毁方法示例

    在本文中,我们将介绍Spring的初始化方法和destroy-method。当实例化或销毁bean时,可能需要执行一些操作,因此可以在创建或销毁bean时使用init-method和destroy-method调用此方法。让我们借助一个简单的例子来理解它:…]

  • 7月27日

    Prefix “context” for element “上下文:组件扫描” or “上下文:注释配置”未绑定:Spring错误

    在Spring或Spring MVC应用程序上工作时,可能会遇到以下错误消息。 组织 .xml.sax.SAXParseException:前缀“context” for element “上下文:组件扫描”没有约束。或org.xml.sax.SAXParseException:前缀“context” for element “上下文:注释配置” is not bound . This issue generally occurs when you do not include 语境 名称 space. For example: Lets say you have below […]

Comments

  1. 你好

    我认为您的代码中有错误。你没有't设置国家对象的applicationContext。所以's null.

    为了避免这种情况,您必须写“countryObj.setApplicationContext(appContext);”到达国家之后's 豆

    告诉我是否'm wrong…

    对不起,我的英语水平,并祝贺您的​​教程。它's really useful!

    1. 嗨,麦克尔,
      无需致电“countryObj.setApplicationContext(appContext);”因为当您实现ApplicationContextAware接口时,它在内部调用set方法并设置ApplicationContext。
      感谢您的评论。我将在文章中对此进行更新。

  2. 很棒的教程。
    仅供参考:我认为最终输出是错误的。代替“India's 大写名称:Delhi”,实际上是在输出“Capital 名称 :Delhi”.

  3. 因此,据我所知,在Country Bean上实现接口是使Capital Bean成为xml中的内部Bean的替代方法。因为如果我将Capital 豆 做成一个内部bean,那我就不会'不必实现ant接口。让我知道我是否错。

  4. 嗨,您对使用哪个XmlApplicationContext有任何指导吗?

    I'是Spring的新手,我不知道何时使用GenericXmlApplicationContext,ClassPathXmlApplicationContext等。

    谢谢

发表评论 取消回复

您的电子邮件地址不会被公开。 必需的地方已做标记 *

订阅我们的新闻

获取质量教程到您的收件箱。现在订阅。


成为朋友

©2020 爪哇 2博客