Spring JPA с ApplicationContext.xml, DAO и Service имеют значение NULL - PullRequest
0 голосов
/ 05 января 2012

У меня проблема с этим.Все DAO и Сервисы являются нулевыми, я не могу это исправить: (

Вот часть конфигурации в web.xml

...
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
        /WEB-INF/applicationContext.xml
     </param-value>
</context-param>
...

и в applicationContext.xml

<context:component-scan base-package="com.tipytut" />
<context:annotation-config />

<bean
    class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

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

<bean
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <value>/WEB-INF/classes/tipytut.properties</value>
    </property>
</bean>

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
</bean>

<bean id="entityManagerFactory"
    class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="jpaVendorAdapter">
        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
            <property name="database" value="MYSQL" />
            <property name="showSql" value="true" />
        </bean>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory" />
    <property name="dataSource" ref="dataSource" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />

У меня есть DAO, такой как:

@Repository("tagDAO")
@Transactional
public class TagDAOImpl extends JpaDAO implements TagDAO {
    public List<Tag> getTags() {
        return getList("SELECT t FROM Tag t");
    }
}

... и служба

@Service("managementService")
@Transactional
public class ManagementServiceImpl implements ManagementService {
    @Autowired
    private TagDAO tagDAO;

    public List<Tag> getTags() {
        return tagDAO.getTags();
    }
}

Когда я вызываю эту службу в моем контроллере, она всегда равна NULL

@Autowired
private ManagementService managementService;

public List<Tag> getTags() {
    try {
        managementService.getTags();
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return tags;
}

Любая помощь будет оценена.

ОБНОВЛЕНО: я загрузил свой проект ЗДЕСЬ (только начальная часть, очень простая), поэтомукаждый может взглянуть. Надеюсь, кто-то может понять, что с этим не так.: (

Ответы [ 3 ]

2 голосов
/ 05 января 2012

Пожалуйста, проверьте, есть ли эти услуги / Дао в пакете com.tipytut.context: annotation-config автоматически включается при сканировании компонента.Ваш контроллер аннотирован @Controller или сделан компонент через @Component?В противном случае он не будет обнаружен и не будет бином Spring, если вы не подключили его вручную.Таким образом, Autowiring не будет работать, если это не Spring bean

1 голос
/ 05 апреля 2012

Я забыл обновить свой вопрос, наконец-то разобрался!Я забыл добавить зависимость для struts2-spring-plugin, проблема в том, что у меня нет сообщения об ошибке об этом X - (

Надеюсь, это кому-нибудь поможет ^^

0 голосов
/ 15 января 2012

используйте @Resource аннотацию с этим

@Resource 
    private TagDAO tagDAO;

в вашем файле конфигурации

аннотируйте ваш контроллер с помощью @Controller и добавьте аннотацию @Resource к вашемууслуги также такие же, как у DAO.

...