春天的对象创造

时间:2011-03-16 17:42:05

标签: spring javabeans

如果我在我的应用程序中使用spring框架工作,那么创建像Test test = new Test() 这样的对象是一种创建实例的坏方法吗?我应该总是使用bean配置来获取我需要的对象/ bean吗?如果是,这是否意味着我应该在spring applicationContext xml文件中拥有所有对象/ bean定义?

3 个答案:

答案 0 :(得分:2)

如果您希望Spring管理您的对象(这意味着注入依赖项,除其他外),您必须使用ApplicationContext。

致电Test test = new Test()并非违法,甚至是不良行为。它只是意味着Spring不会意识到这个对象,也不会打扰自动装配它的依赖关系,或做任何你希望Spring做的事情。

您不一定需要将applicationContext.xml文件用于所有bean声明。许多人喜欢注释,这允许您在applicationContext.xml文件之外声明bean。

Spring管理的bean默认是单例(想想Servlets),这是值得的。如果你想要有Spring感知的有状态bean,你可以使用ObjectFactoryCreatingFactoryBean做这样的事情:

@Autowired 
private ObjectFactory myWidgetFactory;

public void doStuff() {
   Widget w = myWidgetFactory.getObject();
}

您可以在此处详细了解此行为:

http://static.springsource.org/spring/docs/3.0.x/api/org/springframework/beans/factory/config/ObjectFactoryCreatingFactoryBean.html

答案 1 :(得分:1)

对我而言,代表我的应用程序组件的对象 - 服务,控制器,DAO,实用程序等 - 和代表我的应用程序中的实体的对象 - 人员,订单,发票,帐户等等之间存在很大差异。前一类对象应该完全由Spring管理并注入。后一种类型通常由应用程序即时创建,并且通常涉及调用new。这不是问题。

答案 2 :(得分:0)

  

测试测试=新测试()不好的方法   创建一个实例?

是的,这是不好的做法。

  

我应该总是使用bean配置吗?   获取我需要的对象/ bean?

是的,如果您使用Spring进行依赖注入。

  

如果是,这是否意味着我应该拥有   中的所有对象/ bean定义   spring applicationContext xml file?

始终!你也可以使用Annotations。