小编woo*_*ver的帖子

是否可以保证调用@PostConstruct方法的顺序?

我有一个使用Spring进行依赖注入的系统.我使用基于注释的自动装配.通过组件扫描发现bean,即我的上下文XML包含:

<context:component-scan base-package="org.example"/>
Run Code Online (Sandbox Code Playgroud)

我在下面创建了一个简单的例子来说明我的问题.

有一个ZooAnimal对象的容器.开发人员在开发过程Zoo中不知道哪些Animal对象将被包含Zoo; AnimalSpring实例化的具体对象集在编译时是已知的,但是有各种构建配置文件导致各种Animals组,并且Zoo在这些情况下代码不得更改.

其目的Zoo是允许系统的其他部分(此处说明为ZooPatron)Animal在运行时访问对象集,而无需明确依赖某些Animals.

实际上,具体的Animal类将全部由各种Maven工件贡献.我希望能够通过简单地依赖包含这些具体Animal的各种工件来组装我的项目的分布,并且在编译时使所有内容都能正确地自动装配.

我试图通过让个人Animal依赖于这个问题来解决这个问题(不成功)Zoo,以便他们可以在Zoo期间调用注册方法@PostConstruct.这避免了Zoo明确依赖于明确的Animals 列表.

这种方法的问题在于,只有当所有s已经注册,Zoo希望与其进行交互的客户.有一组有限的s在编译时是已知的,并且注册都发生在我的生命周期的Spring连接阶段,所以订阅模型应该是不必要的(即我不希望在运行时添加s)).AnimalAnimalAnimalZoo

不幸的是,所有的客户都Zoo依赖于Zoo.这与Animals的关系完全相同Zoo.因此,s和s 的@PostConstruct方法以任意顺序调用.下面的示例代码说明了这一点 - 在调用时,没有注册,在所有注册时都是几毫秒.AnimalZooPatron@PostConstructZooPatronAnimal

所以这里有两种类型的依赖,我在Spring中努力表达. …

java spring spring-annotations

18
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×1

spring ×1

spring-annotations ×1