UserDao为null,我错误地连接bean并需要帮助

时间:2010-07-18 04:20:36

标签: java hibernate spring spring-mvc

我的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会以某种方式连接吗?

2 个答案:

答案 0 :(得分:2)

@AutoWired注释添加到userDao。

@Service
public class UserServiceImpl implements UserService{

    @AutoWired
    UserDao userDao;

    ...
}

并确保您已设置<context:component-scan/>来扫描@Service@Controller所在的软件包。

答案 1 :(得分:0)

正如krock所提到的,您的UserDao未在UserService内正确“连线”。你有没有试过他的建议?