@import 单个(url)多个({a,b})如启动类(@SpringBootApplication (scanBasePackages=url))引入配置类(@Configuration(proxyBeanMethods=true))
如果配置类在启动类的url包目录下则默认把配置类包含在启动类中,但如果不在则需要使用@import注解引入该配置类
conditional注解及衍生注解
@ConditionalOnBean(name="容器名")
这里可以用@ConditionlOnBean查出同一配置类中不同方法上的@Bean是按顺序依次创建容器的
但在方法上同时有@Bean和@ConditionalOnBean时@ConditionalOnBean的优先级高于@Bean
但不影响同类下的@Bean的创建顺序
在类上时@ConditionalOnBean的优先级大于内部的所有@Bean优先级
但是不同类之间他们的实例化顺序一般是按照包扫描的先后初始化的但我们可以根据以下三种方法来解决
构造方法依赖
来决定他的实例化先后但有趣的是@Bean的容器创建先后还是不会变
如下:没依赖前根据包扫描先后MyConfig的实例化先于YouConfig,并且全实例化创建完配置类容器后才创建@Bean容器
构造方法依赖后:myConfig依赖youConfig后
由此可以看出youConfig 实例化创建容器先于myConfig了但@Bean的容器创建先后并不会变更
但这也可以解决一些开发中的问题,但不可用于循环依赖中如:myConfig依赖youConfig youConfig 自动注入myConfig时这会启动失败
@DependsOn注解
@DependsOn可以完美解决循环依赖的问题
但同样的问题是依然不能解决@Bean容器的创建先后,要解决我目前已知自由@Bean A依赖 @Bean B 时才可以解决创建先后顺序(有更好的方法后续会更新此处内容)
BeanPostProcessor 手动控制
过于繁琐价绍,有兴趣自己去了解