【发布时间】:2014-11-08 10:57:36
【问题描述】:
我正在使用 Spring 并尝试将 DAO 自动连接(使用注释)到服务中,然后将其连接到控制器中。有
@Autowired
Movie movieDao;
它自己不起作用,因为我认为 new 方法被调用,因此 DAO 不是由 Spring 管理的。以下确实有效,但如果我必须将该上下文配置复制并粘贴到每个方法中,它看起来会很混乱
@Autowired
MovieDao movieDao;
@Override
public List<Movie> findAll() {
GenericXmlApplicationContext context = new GenericXmlApplicationContext();
context.load("classpath:app-context.xml");
context.refresh();
MovieDao movieDao = (MovieDao) context.getBean("movieDao", MovieDao.class);
return movieDao.findAll();
}
此代码在我的服务类中的位置。有没有更优雅的方法来确保我的 DAO 正确初始化,而不是将该方法的前 4 行复制并粘贴到每个 Service 方法中?
[编辑] 包含上述代码的类是一个名为 MovieServiceImpl 的类,它本质上对应于this page 中描述的架构中的 DataServicesImpl 类。 (我将添加该架构的摘要/描述以及我即将尝试做的事情)。这是代码:http://pastebin.com/EiTC3bkj
【问题讨论】:
-
你能给我们更多关于这个包含
movieDao字段的类的上下文吗?一般来说,我推荐构造函数注入而不是字段注入,主要是因为这个原因。 -
谢谢,我在帖子中添加了一些内容,并会尽快尝试更新。自动装配构造函数听起来可能会解决问题 - 我会试一试,再次感谢。
-
是的,它是一个网络应用程序。感谢您的建议和链接。
-
为什么要为每个 findAll() 调用加载 spring 上下文? @Autowired 已经注入了这个字段
标签: java spring service dao autowired