UserDao нулевой, я неправильно подключил бин и мне нужна помощь - PullRequest
1 голос
/ 18 июля 2010

Мой 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 как-нибудь подключена?

Ответы [ 2 ]

2 голосов
/ 18 июля 2010

Добавьте @AutoWired аннотацию к userDao.

@Service
public class UserServiceImpl implements UserService{

    @AutoWired
    UserDao userDao;

    ...
}

И убедитесь, что вы настроили <context:component-scan/> для сканирования пакетов, в которых находятся ваши @Service s и @Controller s.

0 голосов
/ 19 июля 2010

Как упомянул krock, ваш UserDao не "должным образом" подключен внутри вашего UserService. Вы даже пробовали его предложение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...