我的SpringBoot第二天
SpringBoot配置以及注入方式等
一、SpringBoot配置文件:yml和properties两种
1…全局的配置文件 application.yml
注意:yml中的基本语法(k:(空格)v:表示一对键值对(空格必须有);
以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的
属性和值也是大小写敏感;)例如:
server:
port: 8081
path: /hello
值得写法:
1.1:对象
(行内写法)person: {name: Sunny,age: 12}
person:
name: Sunny
age: 12
1.2:数组(List Set)
(行内写法)
user
- name
- age
- sex
2… 全局的配置文件 application.properties
通过对象名.属性名=属性值例如:
student.name=张三
二、springboot中如何注入属性的以及具体实现
- 编写一个pojo类,用来绑定配置文件里面定义的属性值List item
- 在application.yml里面定义属性(属性的名称必须要和pojo类里面的属性保持一致)
- 进行绑定的操作 使用@ConfigurationProperties(prefix=“person”)
代码如下:
- 首先创建一个实体类Person和Dog(提供get,set方法以及toString)
注意:在Person加上注解
@Component
@ConfigurationProperties(prefix = “person”)
@Component
@ConfigurationProperties(prefix = "person")//prefix配置文件中的哪个属性进行一一映射,springboot 将当前类的所有属性和配置文件中的相关信息进行绑定
public class Person {
private String lastName;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
public class Dog {
private String name;
private Integer age;
2.在application.yml中注入属性(注意:严格按照yml语法以及值的写法)
person:
lastName: wangyao
age: 19
boss: true
birth: 2000/06/10
maps: {k1: v1,k2: v2}
lists:
- lsia
- lbl
dog:
name: 大黄
age: 3
3.最终在controller中进行测试
@Autowired//自动装配
Person person;
@RequestMapping("person")
public Person testPerson(){
System.out.println(person);
return person;
}
三、SpringBoot通过注解的方式注入
-
首先是@value对应字面量注解方式
@value主要是加在实体类中属性名上(例如)
@value(“lisa”)
private String name;
(其中name是属性,lisa是属性值)
然后在yml配置文件中定义
还有就是通过对象名来调用
@value("${对象名.属性名}")
private String name; -
@email定义的email属性不支持@value
在yml文件中 email的值只能是邮箱类型,否则启动报错 -
@PropertySource
通过引入局部的properties配置文件来实现
@Component
@PropertySource("classpath:student.properties")//引入student.properties
@ConfigurationProperties(prefix = "student")
public class Student {
private String name;
private Integer age;
private Integer score;
private String gender;
-
@ImportResource 导入xml配置文件
主要是导入bean.xml来管理bean
首先定义管理类UserService
然后配置bean.xml
在启动类上添加@importResource注解
最终测试
public class UserService {
public void test(){
System.out.println("这是UserService里面的方法");
}
}
<bean id="userService" class="com.oracle.service.UserService"></bean>
@SpringBootApplication
@ImportResource(locations = {"classpath:bean.xml"})//加载类路径下面的配置文件
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class,args);
}
}
@Autowired
ApplicationContext applicationContext;//注入实现
public String hello(){
UserService userService = (UserService) applicationContext.getBean("userService");
userService.test();
总结:
第一点:需注意的是两种springboot配置文件yml和properties注入属性时
主要是二者书写时的区别:properties没什么注意的就是对象名.属性名等于一个属性值
其次是yml书写格式以及分级一定要注意冒号与属性值之间的空格等等,格式包括(数组和对象书写格式需注意)
第二点:那么在JavaBean注入到配置文件中的时候,需注意所提供的的实体类上加上的注解
@Component和@ConfigurationProperties(prefix = "对象名")
第三点:使用@value注解时,可以使用@value("属性名"),@value("${对象名.属性名}"),
@value("#{10+10}")支持自动计算
第四点:使用@email注解时,不支持@value最为属性名上,在yml使用email时的属性值必须为邮箱格式,
否则就会报错
第五点:@PropertySource 和@ImportResource
@PropertySource是引入局部的properties配置文件
@ImportResource是导入xml配置文件
使用@ConfigurationProperties注解可以获取配置文件中的属性值。但是@ConfigurationProperties
读取的配置文件是全局的,也就是说这个注解只能加载全局的配置文件(application.yml/application.properties).
所有我们选择使用PropertySource
Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;
想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上
第六点:在spring中如何管理bean?(知识拓展)
1.无参数的构造函数
2.静态实例化工厂
3.实例化工厂
4.注解 @Controller @Service ....
5.Java配置类的方式管理bean(springboot中常用的做法)
5.1 定义一个bean
5.2 定义一个配置类(@Configuration修饰一个类)
5.3 在类里面定义一个方法(专门用来管理bean的)