Skip to content

SpringBoot自定义@Enable注解

在Springboot框架中,有很多类似于@EnableXX的注解,比如@EnableAsync@EnableScheduling等等, 一个简单的注解即可实现功能相应功能的引入,那我们该怎么自定义@Enable注解

代码实现

思路

  • 通过UserConfig配置将user 注入bean,然后启动的时候去获取bean。
  • 在不加注解的情况下 ,不会获取到Bean,加了注解可以获取到Bean。

User.java 业务Bean

java
public class User {

}
public class User {

}

UserConfig.java 配置类

注意:这里不要在配置类上加 @configration注解

java
public class UserConfig {

    @Bean
    public User userBean(){
        return new User();
    }

}
public class UserConfig {

    @Bean
    public User userBean(){
        return new User();
    }

}

EnableUser.java自定义注解

关键的注解 @Import() 引入了一个配置类

java
import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({UserConfig.class})  // 重点
public @interface EnableUser {

}
import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import({UserConfig.class})  // 重点
public @interface EnableUser {

}

@EnableUser使用

java
@EnableUser
@SpringBootApplication
public class BootEnableApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(BootEnableApplication.class, args);
        Object user = context.getBean("userBean");
        System.out.println(user);
    }

}
@EnableUser
@SpringBootApplication
public class BootEnableApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(BootEnableApplication.class, args);
        Object user = context.getBean("userBean");
        System.out.println(user);
    }

}