Mon homecontroller a un objet UserService qui est câblé en utilisant le printemps correctement (il rend la page d'index très bien en utilisant une méthode pas UserService).UserDao est null, je suis mauvais câblage et besoin d'aide
Maintenant, je configure hibernate, donc à l'intérieur UserService j'ai un objet UserDao que j'essaye de câbler en utilisant le ressort.
@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();
}
}
Alors ma HomeController était d'appeler la méthode 'sayHello' et il a été bien travaillé comme je l'ai dit.
@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;
}
L'appel à userService.getTestUser() échoue, le UserDao est nulle.
Mon app-config.xml est:
<!-- 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>
Pourquoi mon UserDao null? Je dois faire quelque chose de mal avec le câblage?
De plus, si je décommode la ligne name = packagesToScan, ai-je vraiment besoin de définir un bean pour chaque Dao comme je l'ai fait avec UserDao? Est-ce que la sessionFactory sera câblée d'une manière ou d'une autre?
En ce qui concerne votre question secondaire, vous pouvez utiliser @PersistenceContext dans la déclaration entitymanager dans le DAO pour éviter d'avoir à câbler la sessionfactory à chacun. – Affe