Springboot(一)

 

 

一、创建第一个SpringBoot项目

1、使用spring提供的Initializr创建一个新的基本项目

https://start.spring.io/

点击See all可以添加需要的依赖

2、helloworld项目

pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.topxin.springboot</groupId>
	<artifactId>helloworld</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	  
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
</project>

controller代码

package com.topxin.springboot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {
	@RequestMapping("/hello")
	public String hello(){
		return "Hello World!";
	}
}

在主启动类中启动应用,在浏览器中测试

3、SpringBoot主启动类

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
}

@SpringBootConfiguration:Spring Boot的配置类; 标注在某个类上,表示这是一个Spring Boot的配置类;

@Configuration:配置类上来标注这个注解;

配置类 —– 配置文件;配置类也是容器中的一个组件;@Component

 @EnableAutoConfiguration:开启自动配置功能

以前我们需要配置的东西,SpirngBoot帮我们自动配置,@EnableAutoConfiguration告诉Spinrgboot

开启自动配置功能,这样自动配置才能生效。

@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
}

@AutoConfigurationPackage:自动配置包

@Import(AutoConfigurationPackages.Registrar.class):

Spring的底层注解@Import,给容器中导入一个组件;导入的组件由AutoConfigurationPackages.Registrar.class;

将主配置类(@SpringBootApplication标注的类)的所在包及下面所有子包里面的所有组件扫描到Spring容器;

二、配置文件

1、SpringBoot使用一个全局配置文件

application.propertie

application.yml(以数据为中心

2、YAML语法

k:(空格)v:表示一对键值对(空格必须有);

以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

3、值得写法

2、值的写法

字面量:普通的值(数字,字符串,布尔)

k: v:字面直接来写;

字符串默认不用加上单引号或者双引号;

“”:双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思name: “zhangsan \n lisi”:输出;zhangsan 换行 lisi

”:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi

对象、Map(属性和值)(键值对):

k: v

:在下一行来写对象的属性和值的关系;注意缩进

对象还是k: v的方式

friends:
    lastName: zhangsan
    age: 20 

行内写法:

friends: {lastName: zhangsan,age: 20}

数组(List、Set):

用- 值表示数组中的一个元素

pets:
  ‐ cat
  ‐ dog
  ‐ pig

行内写法

pets: [cat,dog,pig]

配置文件注入yml格式

person:
   lastName: 掌声
   age: 18
   boss: false
   salary: 7000.8
   birthday: 2018/12/12
   maps: {k1: v1,k2: 12}
   lists: [k1,lisi,18,2.3]
   dog:
     name: xiaogou
     age: 2

Bean

/**
 * 将配置文件中配置的每一个属性值,映射到组件中
 * @ConfigurationProperties:告诉springboot将本类中的所有属性和配置文件中的相关配置进行绑定
 *  prefix: 配置文件中哪个配置下的属性进行一一对应
 *  只有这个组件是容器中的组件,才能容器提供@ConfigurationProperties功能
 */
@ConfigurationProperties(prefix = "person")
@Component
public class Person {
    private String lastName;
    private Integer age;
    private Boolean boss;
    private Double salary;
    private Date birthday;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
}

测试

package com.topxin.test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.topxin.springboot.bean.Person;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootApplicationHelloWorldTest {
	
	@Autowired
	Person person;

	@Test
	public void contextLoads() {
		System.out.println(person);
	}
}

 

 我们可以导入配置文件处理器,以后编写配置就有提示了

<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring‐boot‐configuration‐processor</artifactId>
    <optional>true</optional>
</dependency>

@Value获取值和@ConfigurationProperties获取值比较

@Value和@ConfigurationProperties 都是把配置文件中的配置和对象的属性进行绑定

1@ConfigurationProperties@Value
功能批量注入配置文件中的属性一个个指定
松散绑定支持不支持
SpEL不支持支持
JSR303数据校验支持不支持
复杂类型封装支持不支持

如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;

如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

@PropertySource:指定属性文件,让自定义属性文件被spring加载进来和bean对象的属性进行一一映射。

@ImportResource

@ImportResource(locations = {"classpath:beans.xml"})
导入Spring的配置文件让其生效

@Bean

/**
* @Configuration:指明当前类是一个配置类;就是来替代之前的Spring配置文件
* 在配置文件中用<bean><bean/>标签添加组件
*/
@Configuration
public class MyAppConfig {
//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
@Bean
public HelloService helloService02(){
System.out.println("配置类@Bean给容器中添加组件了...");
return new HelloService();
}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值