nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#1': Can

本文介绍了一次在CRM系统中遇到的Hibernate一对多双向关联异常的问题及解决过程。异常源于Contact实体类中Customerinfo属性的getter和setter方法名称错误导致。通过调试和修改方法名最终解决了这个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,今天做公司的CRM客户关系管理软件:其中客户和联系人采用了Hibernate的一对多双向关联的关系。发生了如下异常:  org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loggerListener' defined in ServletContext resource [/WEB-INF/security.xml]: BeanPostProcessor before instantiation of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.transaction.config.internalTransactionAdvisor': Cannot create inner bean '(inner bean)' of type [org.springframework.transaction.interceptor.TransactionInterceptor] while setting bean property 'transactionInterceptor'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#1': Cannot resolve reference to bean 'transactionManager' while setting bean property 'transactionManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/applicationContext-dao.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext-dao.xml]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.ynstudio.crm.model.Contact.customerinfo in com.ynstudio.crm.model.Customerinfo.contacts后几番调试后,终于发现。原来是Contact的   
/**     *所属客户       */  
 @ManyToOne(fetch=FetchType.EAGER)    
@JoinColumn(name="CUSTOMER_ID", unique=true, nullable=true)//, insertable=false, updatable=false) 
 public Customerinfo getCustomer() {  
      return customerinfo;    
}   
public void setCustomer(Customerinfo customerinfo) {        
this.customerinfo = customerinfo;    
}
解释下这里为什么会犯这种低级错:因为这段代码是我拷贝过来的,Customerinfo的get和set方法还没换过来。改为
public Customerinfo getCustomerinfo() {       
return customerinfo;   
} 
public void setCustomerinfo(Customerinfo customerinfo) {       
this.customerinfo = customerinfo;   
}
### Spring Bean 创建异常及资源注入失败解决方案 在 Spring 框架中,`BeanCurrentlyInCreationException` 和 `Circular reference involving containing bean` 是常见的依赖注入错误。这些异常通常发生在 Bean 的创建过程中存在循环依赖或其他配置问题。 #### 一、分析 `BeanCurrentlyInCreationException` 当遇到 `BeanCurrentlyInCreationException` 异常时,表明某个 Bean 正处于创建状态,但由于某些原因无法继续完成初始化过程[^1]。这种问题可能由以下几种情况引起: - **循环依赖**:两个或多个 Bean 彼此相互依赖,形成闭环。Spring 默认会尝试通过单例模式解决部分循环依赖问题,但如果涉及原型作用域的 Bean,则可能导致该异常。 - **延迟加载冲突**:如果 Bean A 需要懒加载另一个尚未完全初始化的 Bean B,在访问时可能会触发此类异常。 针对上述问题,可以通过调整设计结构来规避循环依赖。例如,重构代码逻辑使 Service 层直接调用 Dao 而不是互相引用[^3]。 #### 二、理解 CommonAnnotationBeanPostProcessor 执行机制 对于带有 Java EE 注解(如 `@PostConstruct`, `@PreDestroy`, 或 `@Resource`)的方法或字段,其处理主要依靠 `CommonAnnotationBeanPostProcessor` 完成。以下是具体工作原理[^2]: - **生命周期回调方法** (`@PostConstruct/@PreDestroy`): - 这些注解标记的方法会在 Bean 初始化完成后立即被执行(`@PostConstruct`) ,以及销毁前被调用(`@PreDestroy`) 。它们确保特定业务逻辑能够在对象生命期的关键时刻运行。 ```java import javax.annotation.PostConstruct; public class ExampleBean { @PostConstruct public void init() { System.out.println("Initialization logic here."); } } ``` - **自动装配 (@Resource)**: - 当使用 `@Resource(name="beanName")` 显式指定目标 Bean 名称时,容器依据名称匹配原则寻找对应实例并赋值给当前成员变量; - 若未提供 name 参数,默认按照类型匹配或者基于 setter 方法名推断所需组件的名字进行绑定操作。 #### 三、对比 @Autowired 和 @Resource 查找策略区别 虽然两者都能实现 DI (Dependency Injection),但在实际应用中有细微差别: | 特性 | @Autowired | @Resource | |-------------------|----------------------------------|-------------------------------| | 匹配方式 | 类型优先 | 名字优先 | | 是否支持 null | 支持 | 不支持 | 因此,在复杂场景下选用合适的注解有助于提高程序健壮性和可维护性。 #### 四、总结与建议 为了有效预防和修复因资源注入失败引发的各种 Exception,开发者应遵循最佳实践指南: - 尽量减少不必要的双向关联关系; - 对于确实存在的间接互连情形,考虑引入第三方中介类作为桥梁连接两方; - 合理运用不同类型的 IoC/DI 工具(@Qualifier,@Primary等); - 如果项目允许的话升级到最新版本框架以利用改进后的特性. ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值