springboot 是 spring 项目中的一个子工程,也被称为搭建程序的脚手架,可以快速的构建spring项目。boot相对于之前的spring 主要解决了两个问题,
复杂的配置和混乱的依赖管理(不同的jar包版本兼容问题)。
内置tomcat,jetty和undertow(不需要打包成war包部署)
提供了固定的starter配置,简化构建配置
自动配置spring和第三方库
1、@EnableAutoConfiguration 开启自动配置(比如引用了`spring-boot-starter-web`,而这个启动器中帮我们添加了`tomcat`、`SpringMVC`的依赖。)
2、@ComponentScan 开启注解扫描,(> 通过basePackageClasses或者basePackages属性来指定要扫描的包。
如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包
而我们的@ComponentScan注解声明的类就是main函数所在的启动类,因此扫描的包是该类所在包及其子包)
3、@SpringBootApplication,发现@SpringBootApplication其实是一个组合注解,这里重点的注解有3个:
- @SpringBootConfiguration :申明是个配置类
- @EnableAutoConfiguration:开启自动配置
- @ComponentScan:开启注解扫描
1、新建JdbcProperties
,用来进行属性注入:
在类上通过@ConfigurationProperties注解声明当前类为属性读取类
prefix="jdbc"
读取属性文件中,前缀为jdbc的值。
在类上定义各个属性,名称必须与属性文件中jdbc.
后面部分一致,并且必须具有getter和setter方法
2、在JdbcConfiguration中使用这个属性:
通过@EnableConfigurationProperties(JdbcProperties.class)
来声明要使用JdbcProperties
这个类的对象
然后你可以通过以下方式在JdbcConfiguration类中注入JdbcProperties:
@Autowired注入 (全局变量加注解直接注入)
构造函数注入 (定义一个去全局变量 ,构造函数里给这个变量赋值)
使用类和一些注解来达到和xml一样的效果,典型的几个:
1、@Configuration`:声明一个类作为配置类,代替xml文件
2、@Bean`:声明在方法上,将方法的返回值加入Bean容器,代替`<bean>`标签
3、@Value`:属性注入
4、@PropertySource`:指定外部属性文件。
拦截器interceptor比较实用,例如记录某个接口的访问过程等,
1、定义一个拦截器类,实现handlerInterceptor 接口,重写该接口的方法 请求前 请求后 post请求 拦截做一些操作。
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle method is running!");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle method is running!");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion method is running!");
}
}
2、定义一个配置类,注册定义好的拦截器,实现webmvcConfigr接口,重写 addInterceptor方法,添加进去。
@Configuration
public class MvcConfiguration implements WebMvcConfigurer {
@Autowired
private HandlerInterceptor myInterceptor;
/**
* 重写接口中的addInterceptors方法,添加自定义拦截器
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(myInterceptor).addPathPatterns("/**");
}
}
3、运行并查看日志:
preHandle method is running! postHandle method is running! afterCompletion method is running!
你会发现日志中只有这些打印信息,springMVC的日志信息都没有,因为springMVC记录的log级别是debug,springboot默认是显示info以上,我们需要进行配置。
SpringBoot通过logging.level.*=debug
来配置日志级别,*填写包名
# 设置org.springframework包的日志级别为debug logging.level.org.springframework=debug
就可以看到mvc的运行日志