我有一个关于在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关键字。有人可以解释一下差异
在XML配置中,您向系统解释应该实例化哪个类(有一个“新”但它在幕后)但在Java Config中你实际上必须返回一个实例,这就是为什么我们使用'new '关键字。 'new'只是创建了一个类的实例。
所示的两个例子并不是真正等效的。
什么的
<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。
<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配置中,您必须自己明确地执行此操作。