import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @SpringBootApplication 来标注一个主程序类,说明是一个SpringBoot应用
**/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
// 启动Spring应用。
// 传入的类必须要用@SpringBootApplication来注解
SpringApplication.run(HelloWorldMainApplication.class, args);
}
}
-
@Controller
标注该类是一个控制器类,通常与 @RequestMapping配合使用
-
@RequestMapping
提供路由信息,负责URL到Controller中的具体函数的映射
eg:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@ResponseBody
@RequestMapping("/hello")
public String hello(){
return "Hello World";
}
}
在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。该注解一般会配合@RequestMapping一起使用。
-
@RestController
是 @Controller 和 @ResponseBody 的合集。表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器。
eg:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "Hello World";
}
}
-
@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
-
@ConfigurationProperties(prefix=“XXX”)
将配置文件中的属性值映射个组件中,@ConfigurationProperties用于告诉SpringBoot将本类中所有属性和配置文件中的相关配置进行绑定。
prefix = “XXX” :配置文件下哪个下面的属性进行映射
只有这个组件是容器中的组件,才能使用容器提供的@ConfigurationProperties功能(使用@Component标识该组件是容器中的组件)
默认是读取全局配置文件中的参数,即application.properties或appli.yml文件
eg:
- java 代码
//说明在容器中
@Component
//读取配置文件下的person
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
private boolean boss;
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private Pet dog;
...
}
- yaml配置文件代码
person:
name: 张三
age: 18
boss: false
birth: 2017/12/12
maps: {k1: v1, k2: v2}
lists:
- lisi
- zhaoliu
dog:
name: 大黄
age: 2
注意: 使用application.properties配置文件时,如果有中文,则需要注意编码问题。
-
@Autowired
自动注入,通常配合 @ConfigurationProperties 使用。创建对象时使用该注解,对象不需要new来初始化,若配置文件中有默认值,则会使用配置文件中的值初始化。
eg:
@Autowired
Person person;
@Component
public class Person {
/**
* <bean class="Person">
* <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEL}"></property>
* <bean/>
*/
@Value("${person.last-name}")
private String lastName;
@Value("#{11*2}")
private Integer age;
@Value("true")
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
@Value和@ConfigurationProperties的对比
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法) | 支持 | 不支持 |
SpEL | 不支持 | 支持 |
JSR303数据校验 | 支持 | 不支持 |
复杂类型封装(Map,对象) | 支持 | 不支持 |
- 如果只是在某个业务逻辑中需要获取配置一下文件中的值,使用@Value
- 如果是专门写了一个javaBean来和配置文件映射,我们使用@ConfigurationProperties
@Validated
public class Person {
@Email
private String email;
private String name;
private int age;
...
如果email不符合合法的email格式,则会抛出异常
@PropertySource(value={"classpath:person.properties"})
@ConfigurationProperties(value = "person")
public class Person {
private String name;
private int age;
private boolean boss;
private Date birth;
private Map<String, Object> maps;
private List<Object> lists;
private Pet dog;
...
}
-
@ImportResource(locations = {“classpath=XXX”})
导入Spring的配置文件,让配置文件生效;SpringBoot里面没有Spring的配置文件,我们自己编写的配置文件也不能自动识别,想让Spring的配置文件生效,需要使用 @ImportResource来标注在一个配置类上
eg:
@ImportResource(locations = {"classpath:beans.xml"})
/*
* @Configuration:指明当前类是一个配置类,来替代之前的Spring配置文件
*
* 在配置文件中用<bean></bean>标签来添加组件
*/
@Configuration
public class MyAppConfig {
@Bean
// 将方法的返回值添加到容器中;容器中这个组件的默认id就是方法名
public HelloService helloService(){
System.out.println("@bean给容器中添加组件了!");
return new HelloService();
}
}