@Order、@PostConstruct、@DependsOn注解使用

一、@Order注解

  1. 介绍:注解@Order或者接口Ordered的作用是定义Spring IOC容器中Bean的执行顺序的优先级;
@Retention(RetentionPolicy.RUNTIME)
@Target({
     ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Documented
public @interface Order {
     

	/**
	 * 默认是最低优先级,值越小执行顺序优先级越高
	 */
	int value() default Ordered.LOWEST_PRECEDENCE;
}
public interface Ordered {
     
    int HIGHEST_PRECEDENCE = -2147483648;
    int LOWEST_PRECEDENCE = 2147483647;

    int getOrder();
}
  1. 使用:通过值控制执行顺序;
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE) //值越小,执行优先级越高
public class Test {
     
}

二、@PostConstruct注解

  1. 介绍:@PostConstruct注解可以影响Servlet的生命周期,用来修饰一个非静态的void()方法;被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。

    PostConstruct() 在构造函数之后执行,init() 方法之前执行;
    PreDestroy() 方法在destroy() 方法之后执行;

  2. 使用:作用在非静态无返回值的方法上;

@PostConstruct
private void init() {
     
// 初始化
}
  1. 初始化顺序:Constructor(构造方法) -> @Autowired(依赖注入) -> @PostConstruct(注释的方法)

三、@DependsOn注解

  1. 介绍:控制bean初始化顺序。比如有个场景需要bean B应该被先于bean A被初始化,我们可以在bean A上使用@DependsOn注解,告诉容器bean B应该先被初始化。
@Target({
     ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DependsOn {
     
    String[] value() default {
     }; // 可以定义多个需要优先初始化的bean
}

  1. 使用:标注在带有@Component注解的类上面;或者标注在带有@Bean 注解的方法上面;
@DependsOn({
     "testB", "testC"})
@Component
public class TestA {
     
	// Bean TestA的初始化依赖于testB、testC,也就是说testB、testC会先于testA初始化
}
@Configuration
public class TestA {
     

    @Bean
    @DependsOn(value = "testB")
    public Test init() {
     
    }

你可能感兴趣的:(Spring)