带有 ApplicationContext.xml、DAO 和 Service 的 Spring JPA 为 NULL
Posted
技术标签:
【中文标题】带有 ApplicationContext.xml、DAO 和 Service 的 Spring JPA 为 NULL【英文标题】:Spring JPA with ApplicationContext.xml, DAO and Service are NULL 【发布时间】:2012-01-05 08:55:02 【问题描述】:我遇到了这个问题。所有的 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();
当我在 Controller 中调用该服务时,它始终为 NULL
@Autowired
private ManagementService managementService;
public List<Tag> getTags()
try
managementService.getTags();
catch (Exception ex)
ex.printStackTrace();
return tags;
任何帮助将不胜感激。
更新: 我上传了我的项目HERE(只是开头的部分,很简单),大家可以看看。希望有人能弄清楚这有什么问题。 :(
【问题讨论】:
【参考方案1】:请检查这些 service/Dao 是否在包 com.tipytut 中。 context:annotation-config 在组件扫描中自动启用。您的控制器是用 @Controller 注释还是通过 @Component 制作了一个组件?否则它不会被检测到并且不会是 Spring bean,除非你手动连接它。所以如果不是 Spring bean,自动装配将无法工作
【讨论】:
+1 我还将添加信息,作者可以通过在 XML 中的显式声明以替代方式执行此操作。 imo 只需添加带有 service 和 dao 的包进行扫描。它应该工作 是的,他们是。无论如何感谢您的帮助【参考方案2】:我忘了更新我的问题,终于弄明白了!我忘了为struts2-spring-plugin
添加依赖,问题是我没有收到关于这个X的错误消息-(
希望这会对某人有所帮助^^
【讨论】:
【参考方案3】:使用@Resource
注释
@Resource
private TagDAO tagDAO;
在你的配置文件中
使用@Controller
注释您的控制器并将@Resource
注释添加到您的服务中,也与DAO 相同。
【讨论】:
以上是关于带有 ApplicationContext.xml、DAO 和 Service 的 Spring JPA 为 NULL的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring applicationContext.xml 中读取 JVM 参数
Eclipse RCP 找不到 applicationContext.xml
applicationContext 找不到 Servlet 上下文的控制器