Spring

@Bean @Autowired

  1. @Autowired根据类型注入
    • 如果有两个类型相同,名称不相同的Bean则抛异常,需要使用@Qualifier("xxx")来指定bean的名称
  2. @Bean声明一个Bean交给IOC管理,默认以方法名作为名称,可以使用value或者name参数自定义声明Bean名称用于注入区分

注入自定义yml文件

  1. 在任意类中(建议放到启动类中)注册一个配置实例,将该实例增加需要注入的配置文件,然后交给IOC容器,就可以在类上使用ConfigurationProperties注解将配置文件注入
//初始化需要注入的配置文件
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
    PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
    YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
    yaml.setResources(new ClassPathResource[]{
        new ClassPathResource("config/wechat.yml")
    });
    configurer.setProperties(yaml.getObject());
    return configurer;
}
//将配置文件注入类
@Component
@ConfigurationProperties(prefix = "wechat")
public class WeChat {
    private String appId;

    public String getAppId() {
        return appId;
    }

    public void setAppId(String appId) {
        this.appId = appId;
    }
}
//从ioc容器中拿出装配好的对象
@Autowired
private PropertySourcesPlaceholderConfigurer properties;

基本使用

  1. mvn package 打包指令
  2. java -jar xxx.jar 运行编译后的jar包
  3. 获取运行携带参数
// 运行java -jar xxx.jar --hello
@Autowired
public void injectBean(ApplicationArguments arguments){
    Set names= arguments.getOptionNames();
    System.out.println(JSON.toJSONString(names)); // ['hello']
}

  1. @Autowired是根据类型注入,任何需要注入的参数(字段),属性 只要IOC容器中有相应的类型对象就会注入
  2. springboot @value和@configurationproperties注解的区别
  3. @Value("${author}")value注入,可以根据环境从spring中获取不同的值 注:只能注入单一属性,不能注入对象和数组
  4. yml中嵌套多层注入Bean中时键值对结构需要用对象或者Map来注入
@ConfigurationProperties("foo")
public class FooProperties {

    private boolean enabled;

    private InetAddress remoteAddress;

    private final Security security = new Security();

    public static class Security {

        private String username;

        private String password;
    }
}
  1. 解决CROS

    @Configuration
    public class MyConfiguration {
    
        @Bean
        public WebMvcConfigurer corsConfigurer() {
            return new WebMvcConfigurerAdapter() {
                @Override
                public void addCorsMappings(CorsRegistry registry) {
                    registry.addMapping("/api/**");
                }
            };
        }
    }
    

你可能感兴趣的:(Spring)