SpringBoot注解
1.@SpringBootApplication
一般来说Spring Boot的Web应用都有一个xxxApplication类,并使用@SpringBootApplication注解标记,作为该web应用的加载入口。通过查看@SpringBootApplication注解的源码,可以发现它是一个组合注解:
@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 {
...
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
@SpringBootApplication这个Spring Boot核心注解是由其它三个重要的注解组合,分别是: @SpringBootConfiguration 、 @EnableAutoConfiguration 和 @ComponentScan。
1).@SpringBootConfiguration
@SpringBootConfiguration是Spring Boot项目的配置注解,这也是一个组合注解,源码如下:
@java.lang.annotation.Target(value={java.lang.annotation.ElementType.TYPE})
@java.lang.annotation.Retention(value=java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Documented
@org.springframework.context.annotation.Configuration
public abstract @interface org.springframework.boot.SpringBootConfiguration extends java.lang.annotation.Annotation {
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
通过以上代码,结合前面知识,可以猜测出@SpringBootConfiguration与@Configuration存在着某种关系,可以认为@SpringBootConfiguration就相当于@Configuration,在Spring Boot项目中推荐使用@SpringBootConfiguration替代@Configuration,不过因为注释长度问题,往往@Configuration较为常用。
2).@EnableAutoConfiguration
@EnableAutoConfiguration注解用于启用自动配置,该注解会使Spring Boot根据项目中依赖的jar包自动配置项目的配置项。
例如:上篇中,我们在编写第一个WEB应用时,就在pom.xml中引入了spring-boot-starter-web的依赖,所以项目中就会引入SpringMVC的依赖,就会自动配置tomcat和SpringMVC。
还有后面使用事务时,会引入spring-boot-starter-jdbc的依赖,让Spring Boot自动配置DataSourceTransactionManager或JpaTransactionManager,等等
3).@ComponentScan
@ComponentScan是组件扫描注解,不配置默认扫描@SpringBootApplication所在类的同级目录以及它的子目录(这很重要,后面很应用到这个特性)。当然你也可以自己指定要扫描的包目录,例如:
@ComponentScan(basePackages = "com.dlb.action")
- 1
2.取消部分自动配置
上面说了,Spring Boot根据项目中依赖的jar包自动配置项目的配置项,而Spring Boot支持的自动配置非常之多,如下图所示(只是其中的一部分):
当自动配置的东西一多了,就容易出问题,至于取消自动配置的方式也相当简单,就是对@SpringBootApplication注解的exclude进行赋值即可,如:
@SpringBootApplication(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})
@Controller
public class HelloApplication {
...
}
- 1
- 2
- 3
- 4
- 5
其他的取消自动配置以此类推。
3.自定义Banner
这个知识点其实对开发意义不太,但不妨了解下(可以装个逼~~)。在Spring Boot项目启动时,控制台会输出一个”spring>>>”的banner文字图案,如:
这个banner是可以自定义的,自定义的方法很简单:只需要把想输出的文字保存在banner.txt文件中,然后把这个banner.txt放到resources目录下即可:
运行项目,然后控制台就可以输出banner.txt中的文字了。
这个网站可以得到文字图案:点这里
4.Starter pom
Spring Boot为我们提供了简化企业级开发绝大多数场景的start pom(类似于组件),只要使用了对应的starter pom,Spring Boot就会为我们提供自动配置的Bean。
这里官方给出的starter :点这里
以下是”好心人”对这些Starter pom做的翻译:
怎么使用?直接在pom.xml中引入依赖即可(不懂请参考上篇中“第一个Web应用”中pom.xml配置的第二部分,或请自行百度)。
5、使用Xml配置文件
常规开发中,java配置方式已经可以完全取代xml配置方式了,但有时我们并不想使用java配置,而是继续沿用之前的xml配置方式,或者出于其他原因,一定要在xml中进行配置,那该怎么办呢,很简单,使用@ImportResource注解即可:
@ImportResource(value = {"classpath:xxx1.xml","classpath:xxx2.xml"})
- 1
6、全局配置文件
Spring Boot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。
我们知道Spring Boot会根据在pom.xml中依赖的jar包进行自动配置,当我们要对这些jar包对应的框架进行配置又该怎么办呢,没错,可以在全局配置文件(application.properties或者是application.yml)中进行配置,如tomcat的端口配置等。
1)全局配置文件的基本使用(application.properties)
这部分使用application.properties中的书写方式来介绍。
①tomcat端口配置
server.port=8081
- 1
②修改Spring MVC拦截路径规则
默认Spring MVC拦截路径规则是/,如果要修改成*.html的话,可以在全局配置文件中进行如下设置:
server.servlet-path=*.html
- 1
③视图解析器配置
一样的,Spring Boot也可以通过全局配置文件对视图解析器进行配置:
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
- 1
- 2
④日志输出
Spring Boot对各种日志框架都做了支持,我们可以通过配置来修改默认的日志的配置:
#设置日志级别
logging.level.org.springframework=DEBUG
- 1
- 2
2)全局配置文件的进阶使用(application.yml)
这部分使用application.yml中的书写方式来介绍。
properties与yml文件在形式上有所差别,yml文件的书写方式比较简洁,类似eclipse中package的flag呈现方式(而properties文件则像Hierarchical方式)。如上面properties文件中的属性配置使用yml文件来写:
server:
port: 8080
context-path: /
spring:
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
logging:
level: debug
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
yml文件在书写时,需要注意一个地方:冒号与值中间是存在空格的!
①自定义属性
全局配置文件并不只是配置Spring Boot中已经存在的属性,我们也可以自定义属性(别忘了,它本身就是一个properties文件),代码需要使用@Value(“${xxx}”)注解来获取这些属性,如:
②属性引用属性
属性引用属性也简单,使用${xxx}就可以引用配置文件中的属性了。
③属性转对象
这个就比较有看点了,可以使用@ConfigurationProperties(prefix = “属性名前缀”)这个注解作为配置文件中属性转对象属性的桥梁,具体如图所示:
application.yml
实体类
action中应用
Spring Boot的全局配置很强大,同时它可以配置的属性也很多,以上只列出几个常用的属性配置,
如需查看完整的全局属性配置,请到 spring-boot官方配置文档 查看。