【发布时间】:2018-05-10 16:59:39
【问题描述】:
在我的项目中,我有两个 servlet 和两个 servlet 的公共数据源。 第一个 servlet 是 mvc,第二个是 JAXWS。 对于 @Autowired 字段,第二个 servlet 始终为空。 我检查此字段是否为空的决定是这样的:
public class InRequestServiceImpl implements InRequestService {
@Autowired
public InRequestDao inRequestDao;// = new InRequestDaoImpl();
public InRequestServiceImpl() {
if (inRequestDao == null) inRequestDao = new InRequestDaoImpl();
}
@Override
@Transactional
public void insertData(InRequest doc) throws IOException {
inRequestDao.insertData(doc);
}
...
}
参考问题:SPRING: visibility of autowired beans in services
问题是:这种情况有没有好的做法? 帮助编写干净的代码。
【问题讨论】:
-
没有。通常自动连线应该始终存在。你是如何配置它们的?
-
我更喜欢这样的构造函数注入:
@Autowired public InRequestServiceImpl(InRequestDao inRequestDao) { this.inRequestDao = inRequestDao; } -
@DavidPérezCabrera 这可能会导致同样的问题,因为他的自动装配字段为空:)
-
@Stultuske 你是对的,但我在考虑单元测试。
-
不,不是。
@Autowired字段永远不会是null如果它们是这意味着这些是不由 Spring 管理的 bean 实例。你提到 servlet 的事实让我觉得你有经典的 servlet,由 servlet 容器管理,并期望 spring 神奇地向它们注入依赖项。
标签: java spring servlets autowired