1,@SpringBootApplication标注一个主程序类,表示这是一个Springboot应用
@SpringBootApplication: Spring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就应该运行这个类的main方法来启动SpringBoot应用;
package cn.xxxxxx.springboot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* springBootApplication:标注一个主程序类,表示这个是一个Springboot应用
*/
@SpringBootApplication
public class HelloWorldMainApplication {
public static void main(String[] args) {
//启动
SpringApplication.run(HelloWorldMainApplication.class, args);
}
}
- @SpringBootApplication注解的源码如下
@Target({ElementType.TYPE}) //可以给一个类型进行注解,比如类、接口、枚举
@Retention(RetentionPolicy.RUNTIME) //可以保留到程序运行的时候,它会被加载进入到 JVM 中
@Documented //将注解中的元素包含到 Javadoc 中去。
@Inherited //继承,比如A类上有该注解,B类继承A类,B类就也拥有该注解
@SpringBootConfiguration
@EnableAutoConfiguration
/*
*创建一个配置类,在配置类上添加 @ComponentScan 注解。
*该注解默认会扫描该类所在的包下所有的配置类,相当于之前的 <context:component-scan>。
*/
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication
2,@RestController是@ResponseBody和@Controller的结合体的缩写,一般写在Controller里面
- @Controller表明该类所有的方法返回页面路径,但是在方法上加了@ResponseBody后,该方法返回的是数据。
- @RestController则相当于@Controller和@ResponseBody同时使用的效果,返回的也是数据,不是界面
package cn.xxxxxx.springboot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* RestController:是spring4里的新注解,是@ResponseBody和@Controller的缩写。
*/
@RestController
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "hello SpringBoot,this is my first Application";
}
}
3,@SpringBootConfiguration:SpringBoot的配置类,表示这是一个SpringBoot的配置类
@Configuration
public @interface SpringBootConfiguration
4,@Configuration配置类上面来标注这个注解
@Configuration
public class ExampleConfiguration {
@Value("com.mysql.jdbc.Driver")
private String driverClassName;
@Value("jdbc://xxxx.xx.xxx/xx")
private String driverUrl;
@Value("${root}")
private String driverUsername;
@Value("123456")
private String driverPassword;
@Bean(name = "dataSource")
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(driverUrl);
dataSource.setUsername(driverUsername);
dataSource.setPassword(driverPassword);
return dataSource;
}
@Bean
public PlatformTransactionManager transactionManager() {
return new DataSourceTransactionManager(dataSource());
}
}
5,@EnableAutoConfiguration:开启自动配置功能;@EnableAutoConfiguration告诉SpringBoot开启自动配置功能,这样自动配置才能生效;
6,@Import:Spring的底层注解@Import,给容器中导入一个组件
7,@Import({AutoConfigurationImportSelector.class})
AutoConfigurationImportSelector.class将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中;会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件;
8,
| @ConfigurationProperties | @Value | |
| 功能 | 批量注入配置文件中的属性 | 一个个指定 |
| 松散绑定(松散语法) | 支持 | 不支持 |
| SpEL | 不支持 | 支持 |
| JSR303数据校验 | 支持 | 不支持 |
| 复杂类型封装 | 支持 | 不支持 |
配置文件值注入有两种方式,一个是Spring Boot的@ConfigurationProperties注解,另一个是spring原先的@value注解。
- 松散绑定:
例如Person中有
lastName属性,在配置文件中可以写成lastName或lastname或last-name或last_name等等,不需要完全一样就可以匹配成功 -
SpEL 参考链接
## properties配置文件 persion.age=#{2019-1986+1} # Person类 #--------------------使用@ConfigurationProperties注解,会抛出异常-------------------- @Component @ConfigurationProperties(prefix = "person") public class Person { private Integer age; #--------------------使用@value注解 OK-------------------- @Component public class Person { @Value("${person.age}") private Integer age; -
JSR303数据校验
@ConfigurationProperties支持校验,如果校验不通过,会抛出异常;@Value不支持
-
复杂类型封装
@value注解无法注入map等复杂类型,但list、数组可以
9,@PropertySource注解的作用是加载指定的配置文件,值可以是数组,也就是可以加载多个配置文件
springboot默认加载的配置文件名是application,如果配置文件名不是这个是不会被容器加载的,所以这里Person并没有被注入任何属性值,可以使用@PropertySource加载我们指定的配置文件
使用@PropertySource({"classpath:person.properties"})指定加载person.properties配置文件
注意:使用这个注解加载配置文件就需要配置类使用@component等注解而不是等待@EnableConfigurationProperties,而且不支持yaml,只能是properties
10,@ImportResource注解用于导入Spring的配置文件,让配置文件里面的内容生效;(就是以前写的springmvc.xml、applicationContext.xml)。Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别,想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上。而且,注解必须写在主入口函数上,不可以是测试类。

11,@Bean
package cn.clboy.helloworldquickstart.config;
import cn.clboy.helloworldquickstart.model.Pet;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
*/
@Configuration
public class BeanConfiguration {
/**
*相当于在配置文件中用<bean><bean/>标签添加组件
*/
@Bean
public Pet myPet() {
Pet pet = new Pet();
pet.setName("嘟嘟");
pet.setAge(3);
return pet;
}
}
12,随机占位符
${random.value}
${random.int}
${random.long}
${random.int(10)}
${random.int[1024,65536]}
使用方式如下,
- 可以引用在配置文件中配置的其他属性的值,如果使用配置文件中未定义属性,则会原样输出。
- 可以使用
:指定默认值,比如person.pet.name=${person.last-name:小明}的小黑
来源:CSDN
作者:青耕JL
链接:https://blog.csdn.net/qq_30806631/article/details/104206531
