spring-bean对象创建销毁顺序&depend-on 干预

无依赖bean创建和销毁顺序

  • bean对象的创建顺序和bean xml中定义的顺序一致
  • bean销毁的顺序和bean xml中定义的顺序相反

通过构造器强依赖bean创建和销毁顺序

  • 这里的例子是 bean3->bean2->bean1, 而xml中bean的声明顺序为bean3 bean2 bean1
  • 因为是构造器中强依赖, 所以是在实例化的时候必须就要满足依赖, 否则不能实例化. 所以推测这里的真实实例化的顺序为bean1 bean2 bean3 (果然是这样, 不过如果是set弱依赖就不一样了, 先实例化, 再进行注入)
  • 对于销毁, 也是销毁最外面的, 先销毁bean3, 再逐步到里面, 也就是依赖别人的先销毁, 比如这里bean3 依赖bean2, 如果你先销毁bean3, bean2 就崩了, 所以肯定不能这样
  • 所以这里的创建销毁, 都是根据依赖链来决定正向或者反向的

通过set方法弱依赖bean创建和销毁顺序

  • 关于setter: 根据我对bean对象生命周期以及源码的了解, 先实例化, 再population, 所以这里得看定义的顺序, 如果是文章中的3 2 1的话, 依赖链也是一样的话, 那就是3 2 1创建. 先实例化3, 然后population, 然后实例化2, 然后population, 再实例化1
  • 总之, 是按照依赖链的正向顺序来创建

depend-on干预 bean创建和销毁顺序

  • 通过定义的顺序, 以及强依赖都可以干预bean的创建顺序
  • spring中可以通过depend-on来解决这些问题,在不调整bean的定义顺序和强加依赖的情况下,可以通过depend-on属性来设置当前bean的依赖于哪些bean,那么可以保证depend-on指定的bean在当前bean之前先创建好,销毁的时候在当前bean之后进行销毁
  • 意思是指定一个创建 销毁的顺序, 但并不是通过修改定义顺序和强依赖来实现
  • 不管bean2,bean2,bean4在任何地方定义,都可以确保在bean1创建之前,会先将bean2,bean3,bean4创建好,表示bean1依赖于这3个bean,可能bean1需要用到bean2、bean3、bean4中生成的一些资源或者其他的功能等,但是又没有强制去在bean1类中通过属性定义强依赖的方式去依赖于bean2、bean3、bean4;当然销毁的时候也会先销毁当前bean,再去销毁被依赖的bean,即先销毁bean1,再去销毁depend-on指定的bean。

这里基本上可以这样总结, 销毁的顺序和创建的顺序相反

参考资料

https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933982&idx=1&sn=69a2906f5db1953030ff40225b3ac788&chksm=88621e60bf159776093398f89652fecc99fb78ddf6f7434afbe65f8511d3e41c65d729303507&cur_album_id=1318969124223238148&scene=189#rd

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在项目epoint-zjyth-web上执行目标失败:无法解析依赖。 这个错误通常是由于Maven在构建项目时无法解析所需的依赖项而引起的。这可能有几种原因: 1. 依赖项不存在或命名错误:检查项目的pom.xml文件,确保所有的依赖项的groupId、artifactId和version都是正确的,并且没有任何拼写错误。 2. 依赖项无法从远程仓库获取:Maven默认从中央仓库获取依赖项。请确保您的项目可以访问中央仓库,或者您可以手动将所需的依赖项添加到本地存储库中。 3. 依赖项的版本不一致:如果您的项目中有多个依赖项,可能会发生版本冲突。在pom.xml中指定正确的依赖项版本,或者使用Maven的dependencyManagement元素来处理版本问题。 4. Maven本地存储库已损坏:有时本地存储库可能会损坏或出现错误。您可以尝试删除本地存储库中的相应依赖项,并重新运行Maven构建。 5. Maven仓库缓存错误:Maven将下载的依赖项缓存在本地存储库中。如果缓存中的依赖项出现错误,您可以尝试删除相应的缓存文件,并重新运行Maven构建。 如果上述解决方法都无效,您可能需要进一步检查项目的依赖设置、网络连接或Maven配置。可以查看Maven的日志输出或详细错误信息以获取更多帮助。此外,您可以尝试在搜索引擎或Maven社区寻求帮助,以获取更详细的解决方案。 ### 回答2: 在项目epoint-zjyth-web上执行目标时出错,无法解析依赖项。这个错误通常发生在项目构建过程中,当Maven或者其他构建工具无法找到项目所需的依赖项时。 导致这个错误的原因可能有几种: 1. 依赖项不存在或版本不匹配:项目中可能引用了一个不存在的依赖项,或者依赖项的版本与项目要求的不符。在这种情况下,您需要检查项目的pom.xml文件,确保所有依赖项的信息正确,并且已经正确地配置了仓库地址。 2. 依赖项无法从远程仓库下载:有时候,依赖项可能无法从远程仓库下载,可能是由于网络连接问题或仓库服务器出现故障。在这种情况下,您可以尝试使用本地仓库或其他可访问的仓库,或稍后再试。 3. 仓库配置错误:如果项目的pom.xml文件中配置的仓库地址有误,也会导致无法解析依赖项的错误。您可以检查pom.xml文件中的仓库配置,确保地址正确并可访问。 为了解决这个问题,您可以尝试以下几个步骤: 1. 检查pom.xml文件:确保所有依赖项的信息正确,并且已经正确地配置了仓库地址。 2. 检查网络连接:确保网络连接正常,并且能够访问项目所需的远程仓库。 3. 检查仓库配置:确保项目的仓库配置正确,并且地址能够正确访问。 如果问题仍然存在,您可以尝试手动下载并安装缺少的依赖项到本地仓库,或者联系项目开发人员或其他相关人员寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值