一、springboot默认规则:
(1)springboot默认扫描规则是:自动扫描启动器类的同包或者其子包的下的注解
(2)使用默认数据库配置,那么属性文件中的属性名要是固定值不能改变
(3)Springboot默认集成的就是logback,logback相对来说是优秀于log4j的,log4j2也是参考了logback的设计。本篇就是来看看如何使用logback。新建一个Springboot项目,勾选web就OK了,项目会自动集成logback
(4)springboot启动时会根据依赖生成bean,不会主动读取xml文件,但是会主动读取属性文件
(5)资源文件的约定目录结构
Maven的资源文件目录:/src/Java/resources
spring-boot项目静态文件目录:/src/java/resources/static
spring-boot项目模板文件目录:/src/java/resources/templates
spring-boot静态首页的支持,即index.html放在以上目录结构会直接映射到应用的根目录下
(6)全局异常控制:全局异常GolbalExceptionHandler处理公共的异常问题
(7)springboot全局的配置文件application.properties
(8)启动类放到最外层,否则报错
(9)使用自己配置的连接池,启动类上需加:
@ComponentScan(basePackages = {"com.aliyun.et.industry.templateboot","com.example.demo"})
二、注解
@RestController
——Spring4之后新加入的注解,原来返回json需要@ResponseBody和@Controller配合。即@RestController是@ResponseBody和@Controller的组合注解。
@ResponseBody
——@ResponseBody这个注解表示该方法的返回结果直接写入HTTP response body中,一般在异步获取数据时使用。
@Configuration,@Bean,@Primary
——Consider marking one of the beans as @Primary, updating the consumer to acce
考虑将bean中的一个标记为“初级”,将消费者更新为ACCE。
用@Configuration,@Bean,@Primary
——类上的注解@Configuration 是最新的用注解配置spring,也就是说这是个配置文件,和原来xml配置是等效的,只不过现在用java代码进行配置了 加上一个@Configuration注解就行了,是不是很方便,不需要那么繁琐的xml配置了,这样基于注解的配置,可读性也大大增高了。
@Transactional
——在项目中,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。
@Async,@EnableAsync
——加入@async方法异步方法,@EnableAsync是开启异步功能
注意:同步:a,b,c三个方法依次执行完毕、异步:a,b(异步方法),c,那么a不用等b执行完毕,c就可以执行啦
@Scheduled,@EnableScheduling
——@EnableScheduling:开启任务调度功能、@Scheduled:定时任务任务
https://blog.youkuaiyun.com/jek123456/article/details/74118879
@EnableCaching,@Cacheable,@CachePut
——@EnableCaching开启缓存
——在方法上加@Cacheable,会根据key直接取缓存内容,如果不存在创建
——在方法上加@CachePut,根据key更新缓存内容
@ComponentScan
——@ComponentScan告诉Spring 哪个packages 的用注解标识的类 会被spring自动扫描并且装入bean容器。SpringBoot在写启动类的时候如果不使用@ComponentScan指明对象扫描范围,默认指扫描当前启动类所在的包里的对象,如果当前启动类没有包,则在启动时会报错:Your ApplicationContext is unlikely to start due to a @ComponentScan of the default package错误。
因为启动类不能直接放在main/java文件夹下,必须要建一个包把它放进去或者使用@ComponentScan指明要扫描的包。代码示例如下:@ComponentScan(basePackageClasses=要扫描类.class所在位置的包)-意思是要扫描哪个类所在的包
@RequestMapping中的consumes,produces
——consumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
——produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
https://blog.youkuaiyun.com/blueheart20/article/details/45174399
@ResponseBody 和 @RequestBody 区别
——@Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中
——@RequestBody 注解则是将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。
https://blog.youkuaiyun.com/ff906317011/article/details/78552426
@Order(1)
——@Order(1):aop切面加载顺序,Order值越小,优先级越高!
@annotation
——@annotation(com.cxh.study.aop.controller.UserAccessAnnotation) 表示拦截含有这个注解的方法
@MapperScan
——多包扫描:@MapperScan({"com.kfit.*.mapper","org.kfit.*.mapper"})
@ImportResource(locations = {"classpath:spring-datasource.xml" })
——启动时读取文件
三、类、接口
1、实现ApplicationContextAware:Spring容器会检测容器中的所有Bean,如果发现某个Bean实现了ApplicationContextAware接口,Spring容器会在创建该Bean之后,自动调用该Bean的setApplicationContextAware()方法,调用该方法时,会将容器本身作为参数传给该方法——该方法中的实现部分将Spring传入的参数(容器本身)赋给该类对象的applicationContext实例变量,因此接下来可以通过该applicationContext实例变量来访问容器本身。
2、AbstractRoutingDataSource:数据源动态切换