我的homecontroller有一个UserService对象,它使用spring正确连接(它使用一个没有UserService的方法渲染索引页面。)
现在我设置了hibernate,所以在UserService中我有一个UserDao对象,我试图使用spring连接。
@Service
public class UserServiceImpl implements UserService{
UserDao userDao;
public String sayHello() {
return "hello from user service impl part 2";
}
public String getTestUser() {
return userDao.getById(1L).getUsername();
}
}
所以我的HomeController调用了'sayHello'方法,就像我说的那样工作正常。
@Controller
public class HomeController {
@Autowired
private UserService userService;
@RequestMapping("/")
public ModelAndView Index() {
ModelAndView mav = new ModelAndView();
mav.setViewName("index");
mav.addObject("message", userService.sayHello());
mav.addObject("username", userService.getTestUser());
//userService.getTestUser();
return mav;
}
对userService.getTestUser()的调用失败,因为UserDao为null。
我的app-config.xml是:
<!-- Hibernate SessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--<property name="packagesToScan" value="com.blah.core.db.hibernate"/> -->
<property name="configLocation" value="/WEB-INF/classes/hibernate.cfg.xml"/>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.url=jdbc:mysql://localhost/blah
hibernate.connection.username=dbuser
hibernate.connection.password=123
hibernate.query.substitutions=true 'Y', false 'N'
hibernate.cache.use_query_cache=true
hibernate.cache.use_second_level_cache=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.jdbc.batch_size=0
</value>
</property>
</bean>
<!-- Transaction manager for a single Hibernate SessionFactory (alternative to JTA) -->
<bean id="userDao" class="com.blah.core.db.hibernate.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
为什么我的UserDao为空?我一定是在做错接线?
另外,如果我取消注释name = packagesToScan行,我是否真的需要为每个Dao定义一个bean,就像我使用UserDao一样? sessionFactory会以某种方式连接吗?
答案 0 :(得分:2)
将@AutoWired
注释添加到userDao。
@Service
public class UserServiceImpl implements UserService{
@AutoWired
UserDao userDao;
...
}
并确保您已设置<context:component-scan/>
来扫描@Service
和@Controller
所在的软件包。
答案 1 :(得分:0)
正如krock所提到的,您的UserDao未在UserService内正确“连线”。你有没有试过他的建议?