在spring中一般使用配置文件,然后加载配置文件,在进行注入,原理基本差不多,一般注入:构造注入,方法注入,字段注入。
springBoot沿用了spring注入方式,并且做了增强,也加入了新的注入方式,使之更加优雅
1.通过配置文件以@Value方式注入,老方法不多叙述,上图:
创建配置文件,test.properties,文件内容为:tset=haha
创建测试配置类,TestConfig
@Configuration
@PropertySource("classpath:test.properties")//可以进行加载配置文件,但是不对yml有效
public class TestConfig{
@Value("${tset:ddd}")//进行字段注入,指定如果默认值为ddd
String test;
@Bean
public void test1() {
System.out.println(test+"=================================================");
}
}
就可以了,但是该方法可用,但不舒服,并且@PropertySource,不支持yml,可以看一下升级版,springBoot中有默认加载的配置文件application.yml/application.properties,效果一样,但是格式不同,官方推荐用yml,但是properties实际是优先的,在默认yml中添加配置数据如下:
测试配置类代码如下:
@Configuration
@ConfigurationProperties(prefix = "www")//prefix 为前缀
@Data//该注解使一个插件,功能大概是自动添加setter等方法
public class TestHFConfig {
String tset = "这是默认值";
}
调用时可以直接使用Autowired注入类:
@Autowired
TestHFConfig testHFConfig;
这样有个好处,快捷将配置文件中数据转换为配置类,并且处理方式和@Value不同,@Value找不到默认会报错,除非如上指定默认,但是风格非常不java,不喜欢,所以这种方式,可以通过setter进行注入,找不到不报错,相当于通过方法调用进行柔性的注入,代码侵入少。
虽然这种方式已经很不错了,但是还是不够优雅,很麻烦,有没有更加优雅,且符合java风格的方式呢?
在默认yml中添加,以jdbc开头的DataSource属性,spring容器会检查,发现有同名set,会进行注入,实现无感配置,灰常优雅。
@Bean
@ConfigurationProperties(prefix = "jdbc")
public DataSource getDataSource(){
return new DruidDataSource();
}
以上对springboot中的依赖注入进行了简单介绍和记录,希望自己谨记,不要忘记。