1、添加配置
<parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.3.4.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <!--打包配置--> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
2、编写主启动类
@org.springframework.boot.autoconfigure.SpringBootApplication public class SpringBootApplication { public static void main(String[] args) { SpringApplication.run(SpringBootApplication.class, args); } }
3、创建application.yml配置文件
server: port: 8888 servlet: context-path: /atguigu
4、编写controller
@RestController public class DemoController { @RequestMapping("/hello") public String test1() { return "hello World"; } }
<parent> <artifactId>spring-boot-starter-parent</artifactId> <groupId>org.springframework.boot</groupId> <version>2.3.4.RELEASE</version> </parent> <!-- 他的父项目 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.3.4.RELEASE</version> </parent> <!-- 进入spring-boot-dependencies,里面声明了几乎开发中所有常用依赖的版本,即springboot的仲裁机制 --> <!-- 要想覆盖默认版本,可以在properties中配置 --> <properties> <mysql.version>5.1.43</mysql.version> </properties> <!-- 也可以在对应坐标中声明要是用的版本,该方式优先级最高 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.21</version> </dependency>
开发导入starter启动管理
1、见到很多spring-boot-starter-*,*就是指某种场景 2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入 3、*-spring-boot-starter,第三方为我们提供的简化开发的启动器,即自定义启动器 4、所有场景启动器最底层的依赖(springboot自动配置的核心的依赖) <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
无需关注版本号,自动版本仲裁
1、引入依赖都可以默认不写版本号 2、引入非版本仲裁的jar,要写版本号
自动配好tomcat
引入tomcat依赖
配置tomcat
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
自动配置好springMVC
自动配好web常见功能,如:字符编码问题
默认包结构
@SpringBootApplication 等同于 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan("com.tom.demo")
各种配置拥有默认值
按需加载所有自动配置项
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
其实springBoot对于依赖的管理就是通过<artifactId>spring-boot-dependencies</artifactId> 中对常用的依赖进行同意管理起来,其中还包含版本号等信息,这也就是所谓springboot 的依赖版本仲裁。 至于springboot的按需加载其实就是通过<artifactId>spring-boot-starter-*</artifactId>对 需要的相关依赖按照需要进行加载,进行web开发<artifactId>spring-boot-starter-web</artifactId> 就可以写web
1、@Configuration
1)配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单例的
2)配置类本身也是组件
proxyBeanMethods:代理bean的方法
Full(proxyBeanMethods = true)
Lite(proxyBeanMethods = false)
@Configuration用来标明这个类是一个配置类, springboot2中多该注解多出来一个属性@Configuration(proxyBeanMethods = true), 默认是true,即被调用的时候会去检查被调用的对象在容器中有没有,对象之间依赖 关系都是容器中的;当@Configuration(proxyBeanMethods = false), 对象之间的依赖就不是同一个了。举个荔枝:一个person对象中有一个pet对象, 当为true的时候,person get出来的pet对象和单独get出来的pet对象相等,或者说是同一个,都是容器里面的pet对象; 当为false,person get出来的pet对象和单独get出来的pet对象不相等,person 的pet和 容器中的pet已经不是同一个
1、@ImportResource(“classPath:bean.xml”)导入Spring的配置文件
1、@ConfigurationProperties
注:@ConfigurationProperties该注解中prefix 不支持驼峰方式的命名
/** * @ClassName Shoes * @Description 只有在容器中的组件,才会拥有springboot提供的强大功能, * 因此该对象需要被放进容器中@Component */ @Component @ConfigurationProperties(prefix = "myshoes") public class Shoes { private String brand; private String much; } application.yml server: port: 8888 myshoes: brand: newBalance much: 1000 @Autowired Shoes shoes; @RequestMapping("/getShoes") public Shoes getShoes() { return shoes; } 输出结果:{"brand":"newBalance","much":"1000"}
2、@EnableConfigurationProperties(Shoes.class)
开启Shoes绑定功能,同时将Shoes注入到容器中。
应用场景:有时候我们引入一些对象是源码,无法修改但是,就可以使用该注解,添加到配置类上,然后配置类就可以从容器中引用该对象了。
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}), @Filter(ype = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class})})
public @interface SpringBootApplication {