[spring springboot的视频学习】
springboot历史:
![](https://img.haomeiwen.com/i25650360/d969424d567da3fc.png)
![](https://img.haomeiwen.com/i25650360/cc93b1fa3fe3cf1b.png)
![](https://img.haomeiwen.com/i25650360/3ad36a8d1e0e49c9.jpg)
springboot给属性赋值的几种方式,可以通过yaml也可以通过propertities
还可以用@PropertitySource(value="xxx")
@ConfigurationPropetities(prefix="xx")此时将yaml中前缀为xx的属性的值注入到了这个容器组件中
除了使用@ConfigurationProperties注入属性的值,还可以使用Spring的底层注解@Value注入属性的值。
@Component
public class Person {
@Value("${person.last-name}")
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
}
那么这两个注解的区别是什么?
@ConfigurationProperties能够批量注入配置文件的属性。
@Value只能一个个指定。
@ConfigurationProperties支持松散绑定。
@ConfigurationProperties(prefix = "person"),只需要指定一个前缀,就能绑定有这个前缀的所有属性值。
@ConfigurationProperties还支持JSR303进行配置文件值及校验。
![](https://img.haomeiwen.com/i25650360/4a8172cba0513bed.png)
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value,如果我们转么编写了一个javabean和配置文件进行映射,就直接使用ConfigurationProperties;
![](https://img.haomeiwen.com/i25650360/d5aaa5cedb08b62e.png)
![](https://img.haomeiwen.com/i25650360/c8dfbd0303cb139e.jpg)
@SpringBootApplication:
![](https://img.haomeiwen.com/i25650360/0e36a9be154e01c8.png)
![](https://img.haomeiwen.com/i25650360/ada84bf472a4c5d8.jpg)
spring security:
![](https://img.haomeiwen.com/i25650360/7f78266f62697d5a.png)
![](https://img.haomeiwen.com/i25650360/7932a4985f81a69f.jpg)
自动配置的和核心文件
spring factories
![](https://img.haomeiwen.com/i25650360/ca69a2315b00a4d0.png)
![](https://img.haomeiwen.com/i25650360/bfbbe70934f9aa72.png)
![](https://img.haomeiwen.com/i25650360/9e2154c2e711aba8.png)
![](https://img.haomeiwen.com/i25650360/5e8f39dfd6cd8160.jpg)
![](https://img.haomeiwen.com/i25650360/6bbe6f1ee5c363af.png)
![](https://img.haomeiwen.com/i25650360/abaf41b376381c1e.jpg)
![](https://img.haomeiwen.com/i25650360/46f36b165534e2a6.png)
![](https://img.haomeiwen.com/i25650360/9c484e299c35d009.jpg)
配置类@Configuration也是容器中的一个组件
@EnbaleautoConfiguration 以前需要自己配置的东西springboot帮我们自动配置,这个注解用于告诉springboot开启自动配置功能,这样自动配置才能生效
@ComponentScan:相当于在spring.xml中配置<context:comonent-scan>但是并没有指定basepackage,其中(excludeFilters用来表示排除某些Bean,可以用某种规则来排除某些bean,在spring-ioc中是这样配置的:
![](https://img.haomeiwen.com/i25650360/8df2f1cd4979ec66.png)
![](https://img.haomeiwen.com/i25650360/7c3b703a661d450c.png)
@EnableAutoConfiguration:
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效;
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效
@AutoConfigurationPackage
将当前配置类所在包保存在BasePackages的Bean中。供Spring内部使用
@AutoConfigurationPackage
@Import(AutoConfigurationPackages.Registrar.class) // 保存扫描路径, 提供给spring‐data‐jpa 需要扫描 @Entity
public @interface AutoConfigurationPackage {
@Import(EnableAutoConfigurationImportSelector.class) 关键点!
可以看到,在@EnableAutoConfiguration注解内使用到了@import注解来完成导入配置的功能,而EnableAutoConfigurationImportSelector 实现了DeferredImportSelectorSpring内部在解析@Import注解时会调用getAutoConfigurationEntry方法,这块属于Spring的源码,有点复杂,我们先不管它是怎么调用的。
下面是2.3.5.RELEASE实现源码:
getAutoConfigurationEntry方法进行扫描具有META-INF/spring.factories文件的jar包。
视图解析器:
![](https://img.haomeiwen.com/i25650360/9ad12945dbccaaca.png)
![](https://img.haomeiwen.com/i25650360/c836ee027c9f6dc9.jpg)
在spring中的对象注入的方法
![](https://img.haomeiwen.com/i25650360/cd505447e812f871.png)
![](https://img.haomeiwen.com/i25650360/1d9bd0255c150dff.jpg)
注意,一定要提供set方法,否则无法成功
![](https://img.haomeiwen.com/i25650360/e0f0112497bbaffa.png)
![](https://img.haomeiwen.com/i25650360/7d99dd0f3e2c57dd.jpg)
ref用于javabean对象,value用于基本类型