spring boot初步学习
一.springboot架构初识
1.项目图示:
成功在idea中新建好了项目后,可以发现如下结构:
解析:
- .idea中的是project的xml配置,有maven库的配置,还有springboot之间的依赖配置
- mvn只知道与maven有关,暂时不知道是个啥
- src中,有main和test。
- test文件夹就是一个测试类:
- 而main文件夹中的java是主要编写代码的区域。而resource则是包含了配置文件application.properties:
这个配置类可以配置项目是否开启热启动,还有项目的根目录指定,还有项目的运行端口等等。 - resource中的其他文件也各有用处,如图:
其中的banner.txt是可以在内置的tomcat中加入注释文件的,比如,我的照片:
如果想要关闭banner,可以写这个代码再main中:
SpringApplicationBuilder builder = new SpringApplicationBuilder(Test19SpringBoot2Application.class);
//修改Banner的模式为OFF
builder.bannerMode(Banner.Mode.OFF).run(args);
当然,还可以改变启动后的图标之类的。
- 还有就是日志的配置文件也是在resource中配置的。(一开始没有的话,自己新建一个)如图:
- 项目的启动文件是:
自带了main方法,作为项目启动的地方。
5.常规属性配置
- 只需要在application.properties中定义属性,然后在代码中直接使用@Value注入,spring容器就会自动完成注入的操作。
如下:首先定义数据:
book.author=罗贯中
book.name=三国演义
book.pinyin=sanguoyanyi
//修改中文识别配置
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
然后 在IntelliJ IDEA中依次点击File -> Settings -> Editor -> File Encodings
将Properties Files (*.properties)下的Default encoding for properties files设置为UTF-8,将Transparent native-to-ascii conversion前的勾选上。到此,可以识别中文了
最后在变量中通过@Value直接注入就行了,如下:
@Value(value = "${book.author}")
private String bookAuthor;
@Value("${book.name}")
private String bookName;
@Value("${book.pinyin}")
private String bookPinYin;
修改index方法,使之返回这些值:
@RequestMapping(value = "/",produces = "text/plain;charset=UTF-8")
String index(){
return "Hello Spring Boot! The BookName is "+bookName+";and Book Author is "+bookAuthor+";and Book PinYin is "+bookPinYin;
}
疑问:为什么要多此一举,将所有的数据放到配置文件中,直接写代码的时候赋值不好吗?为了复用吗?
二.定义(知识点)
玉翔说过:所有的定义,组成一个知识。
- 关于@SpringBootApplication注解:
源码:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
}
源码中,它组合了@SpringBootConfiguration、@EnableAutoConfiguration以及@ComponentScan三个注解。
其中:
* @SpringBootConfiguration实际上就是@Configuration注解,表明这个类是一个配置类
* @EnableAutoConfiguration表示让Spring Boot根据类路径中的jar包依赖为当前项目进行自动配置
* @ComponentScan是将指定的packages的用注解标识的类自动装入到spring框架中。简而言之,扫描配置到的类到spring容器中。
同时,源码中不难发现,ComponentScan还有过滤器。所以,如果不想扫描包下所有类,可以过滤了
注意:如果我们使用了@SpringBootApplication注解的话,系统会去入口类的同级包以及下级包中去扫描实体类,因此我们建议入口类的位置在groupId+arctifactID组合的包名下。(arctifactID,就是项目名+id;group目测是实体类包,domain或者pojo或者entity)
- Profile配置问题
profile可以解决数据库加载的时候,不同的Profile文件选择的问题:
如下配置,可以定义两个不同的文件名在resource中,然后,将名字按application-{}.properties规则命名即可。例如:
在两个配置文件中,假设我们写的是;
最后,读取的时候只要在主配置文件application.properties中写入要读取的文件名即可。
spring.profiles.active=dev
这样最后运行的时候,会是8080端口打开。
3.学习框架的一点心得
- 框架的学习,首先是环境配置,搭建好一个环境,明白各种工程目录的作用,才可以知道以后怎么改动文件,同时,运行起你的hello world。这是第一步,一个开始
- 了解最主要的用法,核心知识。比如说:新的定义,还有用法,优缺点。最后升华的时候可以该进原有的缺陷。