我对在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关键字。有谁可以解释差异
答案 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配置中,您必须自己明确地执行它。