1、springboot中的缓存标签@Cacheable使用场景
@Cacheable
只是为了让你省略掉是使用集合来保存缓存数据的代码,给你的业务代码横切入缓存的逻辑.然后使用缓存的场景就是读多写少的场景,读操作特别频繁的话,还是把热点数据缓存起来,这样读的时候直接走内存,不走数据库,减轻数据库压力。
如果一个方法里面有既有查询又有更新并且有循环,此时缓存也可以同步更新的,这个没影响
2、@Bean和@Component的区别
注解作用:
@Component注解表明一个类会作为组件类,并告知Spring要为这个类创建bean。
@Bean注解告诉Spring这个方法将会返回一个对象,这个对象要注册为Spring应用上下文中的bean。通常方法体中包含了最终产生bean实例的逻辑。
两者对比:
相同点: 两者的结果都是为spring容器注册Bean.
不同点: @Component 通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。@Bean 注解通常是我们在标有该注解的方法中定义产生这个bean的逻辑
理解
@Component (@Controller @Service @Respository) 作用于类上,只有在我们的SpringBoot应用程序启用了组件扫描并目包含了被注解的类时才有效。通过组件扫描,Spring将扫描整个类路径,并将所有@Component注释类添加到SpringContext,这里有的不足就是会把整个类当成bean注册到spring 容器上,如果这个类中并不是所有方法都需要注册为bean的话,会出现不需要的方法都注册成为bean,这时候必须确保这些不需要的方法也能注册为bean或者在扫描中加filter 过滤这些不需要的bean,否者spring将无法成功启动。
@Bean相对来说就更加灵活了,它可以独立加在方法上,按需注册到spring容器,而且如果你要用到第三方类库里面某个方法的时候,你就只能用@Bean把这个方法注册到spring容器,因为用@Component你需要配置组件扫描到这个第三方类路径而且还要在别人源代码加上这个注解,很明显是不现实的。
3、SpringBoot2.x过后static下的静态资源无法访问
package com.example.thymeleaf.commons; import org.springframework.stereotype.Component; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * 配置静态资源映射 * * @author sunziwen * @version 1.0 **/ @Component public class WebMvcConfig implements WebMvcConfigurer { /** * 添加静态资源文件,外部可以直接访问地址 * * @param registry */ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); } }