2011-03-16 66 views
2

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

回答

2

如果你希望你的对象被Spring管理(这意味着依赖被注入,除此之外),你必须使用ApplicationContext。

打电话Test test = new Test()是不合法的,甚至是不好的做法。它只是意味着Spring将不会意识到这个对象,并且它不会自动装配它的依赖关系,或者做别的你希望Spring做的事情。

您不一定需要为所有的bean声明使用applicationContext.xml文件。许多人喜欢批注,它们允许您在applicationContext.xml文件之外声明bean。

Spring管理的bean默认情况下是单例(Servlet)。如果你想有状态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

0

Test test = new Test() 创建实例的方式不好吗?

是的,这是不好的做法。

我是否总是使用bean config 来获取我需要的对象/ bean?

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

如果是的话,这是否意味着我应该有 所有的对象/ bean定义在 Spring的ApplicationContext xml文件?

总是!你也可以使用注释。

1

对于我来说是一个代表我的应用程序组件的服务,控制器,DAO,实用程序等的对象与代表我的应用程序中的实体的对象之间的巨大差异 - 人员,订单,发票,帐户等。绝对由Spring管理并注入。后一种类型通常由应用程序实时创建,并且通常涉及调用new。这不是问题。