SpringBootApplication的简要shuomin

SpringBootApplication注解的简要说明

@SpringBootApplication的最核心的三个注解依次如下
  • @SpringBootConfiguration
    • 这个注解等同于@Configuration
       
  • @EnableAutoConfiguration
    • 这个注解是springboot中比较核心的注解
  • @ComponentScan
    • 这个注解只是单纯扫描自定义类并且将扫描到的类托管至spring容器而已

 

获取配置文件的内容

@Autowired
private Environment env;
env.getProperty("local.ip")
默认application.properties
@PropertySource("classpath:jdbc.properties")
@Value("${jdbc.url}")
resources/jdbc.properties
@ConfigurationProperties(prefix = "tomcat")
private String url;

setter/getter method

默认application.properties

当然二和三可以联合使用

并且必须要和EnableConfigurationProperties联动使用

Condition和Conditional配合使用

  • 配置Condition类 
public class Utf8Condition implements Condition {
    @Override
    public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
        String encoding = System.getProperty("file.encoding");
        if (!StringUtils.isEmpty(encoding)) {
            return encoding.equalsIgnoreCase("utf-8");
        }
        return false;
    }
}
  • 使用@Conditional注解配置Condition类
@SpringBootConfiguration
public class EncodeConverConfig {

    @Bean
    @Conditional(Utf8Condition.class)
    public EncodeConvert createUtf8() {
        return new Utf8EncodeConvert();
    }

    @Bean
    @Conditional(GbkCondition.class)
    public EncodeConvert createGbk() {
        return new GbkEncodeConvert();
    }
}

@Import【ImportSelector/ImportBeanDefinitionRegistrar】的使用及说明

  • 定义ImportSelector实现类
  • 定义ImportBeanDefinitionRegistrar的实现类
  • 定义配置类 引入上面的实现类 
public class MyBeanDefinedRegister implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition("huan11.song.springboot.model.Role");
        registry.registerBeanDefinition("role",builder.getBeanDefinition());
    }
}

public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{"huan11.song.springboot.model.User"};
    }
}

@SpringBootConfiguration
@Import({MyImportSelector.class, MyBeanDefinedRegister.class})
public class EnableConfig {
}

Enable配合Import使用 例如springboot的封装类【EnableConfigurationProperties】

  • 创建业务类 EchoBeanPostProcessor
  • 创建Import类 EchoImportSelector 操作业务类(获取注解信息-->装配业务需要的对象)
  • 创建注解类 EnableEcho 需要引入Import类
public class EchoBeanPostProcessor implements BeanPostProcessor {

    private String[] packages;

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        for (String pack : packages) {
            if (bean.getClass().getName().startsWith(pack)) {
                System.out.println(bean.getClass().getName());
            }
        }
        return bean;
    }

    public String[] getPackages() {
        return packages;
    }

    public void setPackages(String[] packages) {
        this.packages = packages;
    }
}

public class EchoImportSelector implements ImportBeanDefinitionRegistrar {
//    @Override
//    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
//        Map<String,Object > map = importingClassMetadata.getAnnotationAttributes(EnableEcho.class.getName());
//        String[] packages = (String[])map.get("packages");
//        BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(EchoBeanPostProcessor.class);
//        builder.addPropertyValue("packages",packages);
//        return new String[]{"huan11.song.springboot.dao.impl.EchoBeanPostProcessor"};
//    }

    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        Map<String,Object > map = importingClassMetadata.getAnnotationAttributes(EnableEcho.class.getName());
        String[] packages = (String[])map.get("packages");
        BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(EchoBeanPostProcessor.class);
        builder.addPropertyValue("packages",packages);
//        BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition("huan11.song.springboot.model.Role");

        registry.registerBeanDefinition("echoBeanPostProcessor",builder.getBeanDefinition());
    }
}

@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Import(EchoImportSelector.class)
public @interface EnableEcho {
    String[] packages();
}

@SpringBootConfiguration
@Import({MyImportSelector.class, MyBeanDefinedRegister.class})
@EnableEcho(packages = {"huan11.song.springboot.condition.test1","huan11.song.springboot.condition.test2"})
public class EnableConfig {
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值