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

问题描述 投票:0回答:3

我有一个关于在spring中使用java配置时使用new关键字的问题。使用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关键字。有人可以解释一下差异

spring spring-java-config
3个回答
2
投票

在XML配置中,您向系统解释应该实例化哪个类(有一个“新”但它在幕后)但在Java Config中你实际上必须返回一个实例,这就是为什么我们使用'new '关键字。 'new'只是创建了一个类的实例。


0
投票

所示的两个例子并不是真正等效的。

什么的

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

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

那么java-config方法并没有真正做到这一点。相反,这遵循工厂方法模式,当我们告诉Spring时,方法的返回值是bean,方法名称是该bean的名称。

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

<beans>

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

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

</beans>

请注意,工厂方法有几种方法。在上面,我们假设,`helloWorldConfig'是工厂,我们在那个bean上指定方法。也是静态工厂方法的情况。有关更多示例,请参阅here


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

这个XML配置告诉Spring“创建一个com.test.HelloWorld的实例并将其放在bean上下文中,bean id为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配置中,您必须自己明确地执行此操作。

热门问题
推荐问题
最新问题