当需要一个 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 {

}

.

02-14 03:54