【发布时间】:2015-05-29 08:21:14
【问题描述】:
我知道有很多关于 Spring Autowired 问题的问题,但我还没有找到与我类似的东西,如果是骗人的,请见谅...
我在自动装配创建的 bean 时遇到问题(调试显示构造函数正在运行),但随后它没有被注入。没有手动实例化的调用。 我在项目中有许多其他自动装配字段,它们工作正常。 不过,最有趣的是,我在不同的项目中使用了相同的模式和配置并且它在那里工作...
那么,这里是代码:
已创建但未注入的 bean:
@Component("genericDao")
public class GenericHibernateJpaDao implements GenericDao {
@Autowired
protected EntityManagerFactory entityManagerfactory;
public GenericHibernateJpaDao() {
}
//getters, setters and dao methods
}
GenericDao 接口只定义了方法,没有注解。
定义 bean 的服务超类:
@Configurable
public abstract class AbstractService {
@Autowired
protected GenericDao genericDao;
//getters, setters
}
服务实现(声明位):
@Service
@Component
public class WechatMessageService extends AbstractService implements IMessageService {
genericDao.saveOrUpdate(n); 处的服务实现断点显示 genericDao 为空(这也是引发 NullPointerEx 的行。)
IMessageService 是
@Service
@Configurable
@Transactional
application-config.xml(相关位):
<beans .......... default-autowire="byName">
<context:component-scan base-package="package.with.dao" />
<context:component-scan base-package="package.with.service" />
<context:spring-configured/>
我猜这只是我的一些相当愚蠢的错误,但我就是想不通,谷歌搜索也无济于事。
感谢您的帮助。
【问题讨论】:
-
(1) 除非你的逻辑真的很不寻常,否则请使用 Spring Data 而不是编写自己的 DAO。 (2) 使用
@PersistenceUnit注入一个JPA EMF。 -
@chrylis 第一次听到有关 Spring Data 的消息,必须看看...我也在应用程序配置中为 EMF 使用
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> -
@Configurable 需要加载时间编织。你启用了吗?
-
如果 Spring 尝试接线但失败,您将收到接线异常。不管你说什么,我怀疑是一个非托管 bean。
-
@chrylis 当我将非参数构造函数替换为参数构造函数时,它抛出 bean 创建异常,说它找不到合适的构造函数
标签: java spring javabeans autowired inject