@Bean @Autowired
-
@Autowired
根据类型注入- 如果有两个类型相同,名称不相同的Bean则抛异常,需要使用
@Qualifier("xxx")
来指定bean的名称
- 如果有两个类型相同,名称不相同的Bean则抛异常,需要使用
-
@Bean
声明一个Bean交给IOC管理,默认以方法名作为名称,可以使用value或者name参数自定义声明Bean名称用于注入区分
注入自定义yml文件
- 在任意类中(建议放到启动类中)注册一个配置实例,将该实例增加需要注入的配置文件,然后交给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;
基本使用
- mvn package 打包指令
- java -jar xxx.jar 运行编译后的jar包
- 获取运行携带参数
// 运行java -jar xxx.jar --hello
@Autowired
public void injectBean(ApplicationArguments arguments){
Set<String> names= arguments.getOptionNames();
System.out.println(JSON.toJSONString(names)); // ['hello']
}
-
@Autowired
是根据类型注入,任何需要注入的参数(字段),属性
只要IOC容器中有相应的类型对象就会注入 - springboot @value和@configurationproperties注解的区别
-
@Value("${author}")
value注入,可以根据环境从spring中获取不同的值 注:只能注入单一属性,不能注入对象和数组 - 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;
}
}
-
解决CROS
@Configuration public class MyConfiguration { @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurerAdapter() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**"); } }; } }
网友评论