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);
}
}