SpringBoot笔记(一)
SpringBoot
IDEA创建springboot项目
如果左边栏有Spring Initializr最好
手动创建的话,需要进行三个步骤:创建Maven工程、引入依赖、提供启动类
配置文件:
- properties文件
- IDEA自动生成application.properties配置文件,可以被springboot自动识别
例:
1 | server.port=9090 |
- yml/yaml文件(荐)
- 创建application.yml文件,其格式与properties文件有所不同
例:
1 | server: |
yml的层级表示更加清晰,不需要像properties一样要写多次相同层级,并且更关注数据。
配置文件的书写
yml配置文件可以实现配置信息与代码的解耦合,如某实体类中
1 |
|
如果直接把信息写进代码会使代码与数据的耦合度过高,可以提取出信息写进properties配置文件:
1 | email.user= |
在yml文件中为:
1 | email: |
这里也能看出yml文件远比properties层级分明,更加清晰且书写冗余少
如果要配置数组信息,使用如下语法
1 | hobbies: |
配置文件的获取
使用@Value("${键名}")
访问配置文件中的信息:
1 |
|
对于每一个变量都要添加@Value
注解,很麻烦。对于相同前缀的配置信息,可以使用同一个配置:@ConfigurationProperties(prefix="")
1 |
|
*什么是注解
视频 注解和反射
注解Annotation是所有框架(Mybatis、Spring等)的底层实现机制。注解和反射是一组相对的概念。
- Annotation从JDK5.0开始引入
- 可以对程序做出解释(类似注释,并不是程序本身)、可以被其他程序(如编译器)读取
形式是@注释名
,还可以添加参数值,如@SuppressWarnings(value="unchecked")
Bean管理
Bean注册
注解 | 说明 | 位置 |
---|---|---|
@Component | 声明bean的基础注解 | 不属于以下三类时用此注解 |
@Controller | @Component的衍生注解 | 标注在控制器类上 |
@Service | @Component的衍生注解 | 标注在业务类上 |
@Repository | @Component的衍生注解 | 标注在数据访问类上(mybatis已整合,很少用) |
@Component
及其衍生注解无法声明来自第三方的bean对象
使用maven命令引入第三方包:
1 | mvn install:install-file -Dfile=path/to/jar # 引入的包在本地磁盘的路径 |
然后在项目pom/xml
文件中引入依赖:
1 | <dependency> |
如何声明第三方包的Bean对象?
使用
@Bean
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18// 向IoC容器注入第三方包的bean对象
// 也就是将方法返回值交给IoC容器管理,成为IoC容器的bean
// bean的注册可以在配置类中进行集中注册
// 另外,配置类所在的包必须在启动类所在包内,否则无法自动扫描
public class CommonConfig {
public NewBean newBean() {
return new NewBean();
}
// 如果一个bean要依赖另一个已经存在的bean,则只需在方法上声明即可
public MaBean maBean(NewBean newBean) {
return new MaBean();
}
}使用
@Import
如果配置类不在启动类目录及子目录中,可以使用
@Import
注解进行设置导入配置类
1
2
3
4
5
6
7
public class Application {
public static void main(String[] args) {
ApplicationContext context = SpringApplication.run(Application.class, args)
}
}导入
ImportSelector
接口实现类1
2
3
4
5
6
7
8
9
10// CommonImportSelector是ImportSelector的实现
public class CommonImportSelector implements ImportSelector {
public Stirng[] selectImports(AnnotationMetadata importingClassMetadata) {
return new String[] {"com.groupID.config.CommonConfig"};
}
}
// 接下来在使用@Import注解的类中设置实现类即可:
//@Import(CommonImportSelector.class)可以将需要导入的多个配置类写进
.imports
文件,然后selectImports
读取配置文件:1
2com.groupID.config.CommonConfig
com.groupID.config.NoCommonConfig
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class CommonImportSelector implements ImportSelector {
public Stirng[] selectImports(AnnotationMetadata importingClassMetadata) {
List<String> imports = new ArrayList<>();
InputStream is = CommonImportSelector.class.getClassLoader().getResourceAsStream("common.imports");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = null;
try {
while ((line = br.readLine()) != null) {
imports.add(line);
}
br.close();
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
return imports.toArray(new String[0]);
}
}
`@Import`可以写进自定义的组合注解进行封装,一般命名为`@EnableXXXX`,这里不再赘述
注:返回启动类的内容:项目中启动类Application的主函数是
1 |
|
可以使用ApplicationContext
接收容器内容,如下:
1 |
|
如果想获取启动类中的bean对象,只需NewBean bean = context.getBean(NewBean.class)
即可。
(写这个是因为大三上学期的Android课设的时候经常看到这段语句,当时还不理解什么意思)