在spring中使用java配置时new关键字的用法是什么

时间:2017-12-21 21:25:39

标签: spring spring-java-config

我对在spring中使用java配置时使用new关键字的用法有疑问。使用新关键字

的需求是什么

参考下面提到的例子: 使用Java Config实现的代码

@Configuration
public class HelloWorldConfig {
   @Bean 
   public HelloWorld helloWorld(){
     return new HelloWorld();
  }
}

以上代码将等同于以下XML配置

 <beans>
    <bean id = "helloWorld" class = "com.test.HelloWorld" />
</beans>

在XML配置中,我们不使用new关键字,而在java配置中我们使用new关键字。有谁可以解释差异

3 个答案:

答案 0 :(得分:2)

在XML配置中,你向系统解释应该实例化哪个类(有一个&#34; new&#34;但它在幕后)但是在Java Config中你实际上必须返回一个实例所以这就是为什么我们使用&#39; new&#39;关键词。 &#39;新&#39;只需创建一个类的实例。

答案 1 :(得分:0)

有问题的两个例子实际上并不等同。

什么

<beans>
    <bean id="helloWorld" 
          class="com.test.HelloWorld" />
</beans>

确实如此,它是否告诉Spring实例化类com.test.HelloWorld,并将结果bean命名为#34; helloWorld&#34;。

然后java-config方法并没有真正做到这一点。相反,这遵循 factory-method 模式,当我们告诉Spring时,方法的返回值是bean 方法名称是那个豆

与XML相同的是提到的工厂方法方法,在这种情况下看起来像这样:

<beans>

    <bean id="helloWorldConfig"
          class="com.test.HelloWorldConfig" />

    <bean id="helloWorld" 
          factory-bean="helloWorldConfig"
          factory-method="helloWorld" />

</beans>

请注意, factory-method 有几种方法。在上面,我们假设,'helloWorldConfig&#34;是工厂,我们在那个bean上指定方法。这是具有静态工厂方法的情况。有关更多示例,请参阅here

答案 2 :(得分:0)

<beans>
    <bean id = "helloWorld" class = "com.test.HelloWorld" />
</beans>

这个XML配置告诉Spring“创建com.test.HelloWorld的实例并将其放在bean上下文中,bean标识为helloWorld”。

@Configuration
public class HelloWorldConfig {

    @Bean 
    public HelloWorld helloWorld(){
        return new HelloWorld();
    }
}

在此Java配置中,我们返回com.test.HelloWorld的实例。由于@Bean注释,此实例将放入bean上下文中。由于没有给出特定的bean id,因此bean id来自方法hellowWorld(),因此变为helloWorld

如您所见,两种配置都需要com.test.HelloWorld的实例。 XML配置隐式地创建实例,而在Java配置中,您必须自己明确地执行它。