Spring 3 не вводит DAO bean - PullRequest
       20

Spring 3 не вводит DAO bean

0 голосов
/ 18 ноября 2011

Я использую Spring 3 и UserServiceImpl. Служба не видит компонент Dao.

Это мой UserDao:

    @Repository
    public class UserDaoImpl implements UserDao {
        private SessionFactory sessionFactory;

        public SessionFactory getSessionFactory() {
            return this.sessionFactory;
        }

        @Autowired
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }

        private Session currentSession() {
            return sessionFactory.getCurrentSession();
        }
    }

Затем служебный компонент:

    public class UserServiceImpl implements UserService {
        @Autowired
        private UserDao userDao;

        public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
        }


        public String testeoDAO() {
            return userDao.funciona();
        }
    }

Метод testeoDAO написал только для тестирования DAO. ApplicationContext

    <context:annotation-config/>

    <bean id="userDao" class="com.apress.usermanager.dao.hibernate.UserDaoImpl">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

    <bean id="userService" class="com.apress.usermanager.service.UserServiceImpl">
        <property name="userDao" ref="userDao"/>
    </bean>


    <bean class="org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"
          autowire="byName">
        <property name="dataSource" ref="dataSource"/>
        <property name="packagesToScan" value="com.apress.usermanager"/>
        <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
        <property name="hibernateProperties">
            <value>
                hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
                hibernate.query.substitutions=true 'Y', false 'N'
                hibernate.cache.use_second_level_cache=true
                hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
                hibernate.hbm2ddl.auto=update
                hibernate.use_sql_comments=true
                hibernate.show_sql=true
                hibernate.current_session_context_class=thread
            </value>
        </property>
    </bean>


    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="100"/>
        <property name="maxWait" value="1000"/>
        <property name="poolPreparedStatements" value="true"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="testOnBorrow" value="true"/>
        <property name="validationQuery" value="select 1=1"/>
    </bean>


    <bean id="staticDataImporter" class="com.apress.usermanager.support.StaticDataImporter" depends-on="sessionFactory">
        <property name="dataSource" ref="dataSource"/>
        <property name="staticData" value="classpath:default-data.xml"/>
    </bean>

    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

И ошибка:

java.lang.NullPointerException на com.apress.usermanager.service.UserServiceImpl.testeoDAO (UserServiceImpl.java:49) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke (Method.java:597)

1 Ответ

2 голосов
/ 18 ноября 2011

Я думаю, вам нужно добавить

<context:component-scan base-package="com.a,com.b">
</context:component-scan>

Для сканирования пакета com.a и com.b.Это позволяет classpath scan и добавлять все @Component и т. Д.

Аннотировать UserServiceImpl с @Service.

С уважением.

...