如果我在我的应用程序中使用spring框架工作,那么创建像Test test = new Test()
这样的对象是一种创建实例的坏方法吗?我应该总是使用bean配置来获取我需要的对象/ bean吗?如果是,这是否意味着我应该在spring applicationContext xml文件中拥有所有对象/ bean定义?
答案 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();
}
您可以在此处详细了解此行为:
答案 1 :(得分:1)
对我而言,代表我的应用程序组件的对象 - 服务,控制器,DAO,实用程序等 - 和代表我的应用程序中的实体的对象 - 人员,订单,发票,帐户等等之间存在很大差异。前一类对象应该完全由Spring管理并注入。后一种类型通常由应用程序即时创建,并且通常涉及调用new
。这不是问题。
答案 2 :(得分:0)
测试测试=新测试()不好的方法 创建一个实例?
是的,这是不好的做法。
我应该总是使用bean配置吗? 获取我需要的对象/ bean?
是的,如果您使用Spring进行依赖注入。
如果是,这是否意味着我应该拥有 中的所有对象/ bean定义 spring applicationContext xml file?
始终!你也可以使用Annotations。