Spring

作者: PureProgramer | 来源:发表于2018-11-23 23:53 被阅读0次

    @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<String> 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

          本文链接:https://www.haomeiwen.com/subject/vsxeqqtx.html