Мой homecontroller имеет объект UserService, который правильно подключается с помощью Spring (он прекрасно отображает страницу индекса, используя метод no UserService).
Теперь я настраиваю hibernate, поэтому внутри UserService у меня есть объект UserDao, которыйЯ пытаюсь подключиться с помощью пружины.
@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 null?Должно быть, я что-то не так делаю с проводкой?
Кроме того, если я раскомментирую строку name = packagesToScan, действительно ли мне нужно определять bean-компонент для каждого Dao, как я делал с UserDao?Будет ли сессия Factory как-нибудь подключена?