Spring中的新功能:加载应用程序上下文

时间:2014-11-25 12:25:03

标签: spring applicationcontext

我是Spring的新手。

到目前为止,在我的应用程序中,每次我需要使用bean时都会加载XML。

ApplicationContext context =                 新的ClassPathXmlApplicationContext(" applicationContext.xml");

因此,在我需要加载特定bean的每个类中,我使用上面的行。

在效率或正确使用方面,我想知道这是否正确使用(我怀疑它不是),或者每当一个类需要时,上下文应该作为参数传递。

由于

3 个答案:

答案 0 :(得分:0)

我假设您在非Web应用程序中使用Spring。

如果您每次需要检索bean时都在创建新的应用程序上下文,那么它确实不是正确的解决方案。您应该为每个应用程序创建一次应用程序上下文。

因此,解决方案就是建议将应用程序上下文实例传递给需要它的类,或者确保在应用程序中使用相同的实例。

您当前设置可能遇到的许多问题之一是bean范围问题。 Spring有单例bean,但这些只是一个应用程序上下文中的单例。因此,如果从两个不同的应用程序上下文中检索单例的bean,它们将不是同一个实例。其他问题将涉及性能,因为应用程序上下文创建将是昂贵的操作。

答案 1 :(得分:0)

如果你使用弹簧,那么你应该在任何地方使用它。因此,不是传递应用程序上下文,而是将每个bean放在那里,让Spring为你连接点。

简而言之,永远不要打电话给new。向Spring询问bean。如果bean具有依赖关系,请使用构造函数注入。

通过这种方式,Spring可以为您创建所有bean,将它们连接起来并返回完全正常运行的实例,而无需担心某些内容的形成。

您还应该阅读有关Java-based container configuration的文章。

相关文章:

答案 2 :(得分:0)

只需加载XML文件并创建应用程序上下文对象。只要加载XML,Spring就会注入所有对象依赖项。

因此,您不需要一次又一次地加载或创建应用程序上下文对象。只需使用以下示例检查控制台,您就会了解它。

示例:在main方法中,您仅编写此行代码。

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

interface IParent {
    public void whoAreYou();
}

class ChildA implements IParent {

    public ChildA (IParent ChildB) {
        super();
        System.err.println("Constructor ChildA ");
        ChildB.whoAreYou();
    }

    public ChildA (){
        System.err.println("Constructor ChildA ");
    }

    @Override
    public void whoAreYou() {
        System.err.println("ChildA ");
    }

}

class ChildB implements IParent {

    public ChildB (){
        System.err.println("Constructor ChildB");
    }

    @Override
    public void whoAreYou() {
        System.err.println("ChildB");

    }
}

XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">


   <context:annotation-config/>

   <bean id="childA" class="com.spring.xmlbased.config.ChildA">
       <constructor-arg>
           <bean id="ChildB" class="com.spring.xmlbased.config.ChildB"/>
       </constructor-arg>
   </bean>
</beans>

如果您需要进一步说明,请告诉我。