当需要一个 Bean 初始化后,利用其实例方法或者其他巴拉巴拉,来初始化当前 Bean ,引用方式。
引用方式
1、注入时添加 不必要 条件
2、添加 @DependsOn 或 @ConditionalOnBean注解,参数调用
3. 依赖不太复杂时,可使用 @Lazy 注解
配置类1
package cc.ash.config; import cc.ash.bo.Course; import cc.ash.bo.Student; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.*; @Slf4j @Configuration public class InitConfig { /** * 1、注入时添加 不必要 条件 * 2、添加 DependsOn 注解,参数调用其对象方法 * 3. 依赖不太复杂时,可使用 @Lazy 注解 */ @Autowired(required = false) Course course; /** * @Dependson注解是在另外一个实例创建之后才创建当前实例,也就是,最终两个实例都会创建,只是顺序不一样 * * @ConditionalOnBean注解是只有当另外一个实例存在时,才创建,否则不创建,也就是,最终有可能两个实例都创建了,有可能只创建了一个实例,也有可能一个实例都没创建 */ @Bean @Scope("prototype") //singleton(默认)、prototype、request、session @DependsOn(value = {"course"}) public Student stu(Course course) { log.info(">>>>>>>>>>>>>>>>>>" + course.toString()); return new Student(); } }
配置类2
package cc.ash.config; import cc.ash.bo.Course; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class InitialConfig { @Bean public Course course() { return new Course(); } }
启动类
(不在基础包下,添加基础包扫描注解)
package cc.ash.springcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @ComponentScan(value = "cc.ash") @SpringBootApplication public class PaymentMain8001 { public static void main(String[] args) { SpringApplication.run(PaymentMain8001.class, args); } }
junit测试类
@RunWith(SpringRunner.class) @SpringBootTest(classes = PaymentMain8001.class) public class Test { }
.