Spring:newing up和autowiring:新建对象是否可以永远不使用Autowired?

时间:2016-10-12 11:30:34

标签: java spring spring-mvc

据我所知,如果你直接新建一个对象,Spring现在可以注入@Autowired指定的依赖项。

但是,假设您有一个创建新Customer对象的UI。我相信,在坚持下去之前新客户是唯一的出路。如果是这样,如果我希望客户有一些复杂的行为需要访问一些通常会自动装配的服务呢?

有可能一旦Customer对象被保存,然后在那时检索Spring就可以注入自动连接的依赖项吗?所以错误是试图“过早地使用客户对象?”

我的主要问题是,是否希望在反映设计缺陷的新对象中使用Autowired?

编辑:我已经看到了一个新的对象实际上可以使用Autowire的方法,但我的问题是,对于像Customer,User,Person等普通类来说,他们甚至需要使用@Autowired是不寻常的吗?它们本质上应该是仅数据对象吗?我似乎需要创建新对象并让这些对象表现出行为,但也许我在设计方面做错了。

2 个答案:

答案 0 :(得分:1)

您可以在Spring中使用org.springframework.beans.factory.ObjectFactory<T>动态创建对象的多个实例,这类似于Java EE CDI的javax.enterprise.inject.Instance<T>接口。请参阅:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/ObjectFactory.html

@Autowired
ObjectFactory<Customer> customerFactory; 

...
Customer newCustomer = customerFactory.get();
...

如果&#34;客户&#34;是你的实体类,你应该避免自动装配服务。

您的实施情况如何?你能提供更多细节吗?

答案 1 :(得分:0)

我相信Sergii确认设计存在缺陷是正确的,我与应用程序的原始设计师进行了沟通。因此,即使有人可以跳过篮球来自动装配新的物体,但根据Sergii,它与原始设计或Spring Boot的方法不一致。

我看到了一种在没有自动装配的情况下做我需要的方法 - 新建的对象&#39;复杂的行为现在在应用程序的其他地方完成。