Java Spring3&x2B;autowire bean,它们互相使用?
例如,我有Java Spring3&x2B;autowire bean,它们互相使用?,java,spring,autowired,Java,Spring,Autowired,例如,我有 @Service public class UserSerice { @Autowired private HouseService houseService; } 及 Spring将如何自动连线? 这样配置bean是一种好的做法吗?谷歌搜索这些术语 飞锤图案 java中的循环依赖 就像两个java对象可以相互引用一样,拥有这样的配置是完全有效的。因为它不是构造函数注入,spring可以安全地实例化这两个对象,然后满足它们的依赖关系。在架构方面,这种情况被称为“代码气味”。
@Service
public class UserSerice {
@Autowired
private HouseService houseService;
}
及
Spring将如何自动连线?
这样配置bean是一种好的做法吗?谷歌搜索这些术语 飞锤图案 java中的循环依赖
就像两个java对象可以相互引用一样,拥有这样的配置是完全有效的。因为它不是构造函数注入,spring可以安全地实例化这两个对象,然后满足它们的依赖关系。在架构方面,这种情况被称为“代码气味”。这是作文有问题的迹象。也许你需要移动逻辑,也许你需要引入第三类,这要看情况而定。 例如:类A需要通过 构造函数注入,类B需要类A的实例 通过构造函数注入…抛出一个 BeanCurrentlyIncremationException 不建议使用。。。 一种可能的解决方案是编辑某些类的源代码 由setter而不是构造函数配置 加上: 我以setter方式调试了循环依赖项。序列似乎是: ->开始创建bean ->开始创建bean B ->将A注入B,尽管从Spring生命周期的角度来看,A并不是完全创建的 ->Bean B创建完成 ->将bean B注入A ->豆子 保持冷静,使用@Lazy 可以使用@Lazy注释()打破循环依赖关系 您可以按原样使用客房服务(无更改:)
进一步的解决方案:hmm。。但如果我没弄错的话,我不会使用构造函数注入。我使用@Autowiredannotation@omickron我添加了bean创建序列。所以,这样就没有BeanCurrentlyIncremationException了,是吗?不,它是setter,不是构造函数。谢谢!因为哪个版本的Spring@Autowired不是构造函数注入?@omickron从一开始:)当Autowired应用于字段或访问器方法时,它是setter注入,并在实例化后执行。当构造函数被标记为自动连线时,它就是构造函数注入。至于我,我更喜欢picocontainer方式,当构造函数自动连接是按类型自动完成的,实际上没有任何注释,尽管它在spring World中不太常见。谢谢,@xeye,我太年轻了,你帮助我理解了spring注入是如何工作的。我很感激。
@Service
public class HouseService {
@Autowired
private UserSerice userService;
}
@Service
public class UserSerice {
@Autowired
@Lazy
private HouseService houseService;
}
@Service
public class HouseService {
@Autowired
private UserSerice userService;
}