Spring + Redis

一、Spring

1.常用注解

1.1Spring注解

@SpringBootApplication:申明让 spring boot 自动给程序进行必要的配置, 这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。

               @ComponentScan组件扫描、可自动发现和装配一些 Bean。

               @Configuration等同于 spring 的 XML 配置文件;使用 Java 代码可以检查类型 安全。

               @EnableAutoConfiguration 自动配置。

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@ComponentScan(basePackages = {"com.atguigu"})


public class EduApplication {

    public static void main(String[] args) {
        SpringApplication.run(EduApplication.class, args);
    }
}

@ComponentScan包含在@SpringBootApplication中,若不添加默认为启动类所在目录以及其子包下。若需要扫描其他地方则需在@ComponentScan注解中自行添加。

@RestController 注解是@Controller 和@ResponseBody 的合集,表示这是个控制器 bean,并且是将函数的返回值直 接填入 HTTP 响应体中,是 REST 风格的控制器。@Controller:用于定义控制器类,在 spring 项目中由控制器负责将用户发来 的 URL 请求转发到对应的服务接口(service 层),一般这个注解在类中,通 常方法需要配合注解@RequestMapping。 @RestController:用于标注控制层组件(如 struts 中的 action), @ResponseBody 和@Controller 的合集。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
    @AliasFor(
        annotation = Controller.class
    )
    String value() default "";
}

@ResponseBody :表示该方法的返回结果直接写入 HTTP response body 中,一 般在异步获取数据时使用,用于构建 RESTful 的 api。在使用@RequestMapping 后,返回值通常解析为跳转路径,加上@responsebody 后返回结果不会被解析 为跳转路径,而是直接写入 HTTP response body 中。比如异步获取 json 数 据,加上@responsebody 后,会直接返回 json 数据。该注解一般会配合 @RequestMapping 一起使用

@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
public class OssController {

    @Autowired
    private OssService ossService;

    //上传头像的方法
    @PostMapping
    public R uploadOssFile(MultipartFile file) {
        //获取上传文件  MultipartFile
        //返回上传到oss的路径
        String url = ossService.uploadFileAvatar(file);
        return R.ok().data("url",url);
    }
}

@Autowired 自动导入。

@PathVariable 获取参数。

@JsonBackReference 解决嵌套外链问题。

@RepositoryRestResourcepublic 配合 spring-boot-starter-data-rest 使 用。

@RequestMapping:提供路由信息,负责 URL 到 Controller 中的具体函数的映 射。

@EnableAutoConfiguration:Spring Boot 自动配置(autoconfiguration):尝试根据你添加的 jar 依赖自动配置你的 Spring 应用。例 如,如果你的 classpath 下存在 HSQLDB,并且你没有手动配置任何数据库连接 beans,那么我们将自动配置一个内存型(in-memory)数据库”。 你可以将@EnableAutoConfiguration 或者@SpringBootApplication 注解添加到 一个@Configuration 类上来选择自动配置。如果发现应用了你不想要的特定自 动配置类,你可以使用@EnableAutoConfiguration 注解的排除属性来禁用它们。

@ComponentScan:表示将该类自动发现扫描组件。个人理解相当于,如果扫描 到有@Component、@Controller、@Service 等这些注解的类,并注册为 Bean, 可以自动收集所有的 Spring 组件,包括@Configuration 类。我们经常使用 @ComponentScan 注解搜索 beans,并结合@Autowired 注解导入。可以自动收集 所有的 Spring 组件,包括@Configuration 类。

@Configuration:相当于传统的 xml 配置文件,如果有些第三方库需要用到 xml 文件,建议仍然通过@Configuration 类作为项目的配置主类——可以使用 @ImportResource 注解加载 xml 配置文件。 @Import:用来导入其他配置类。 @ImportResource:用来加载 xml 配置文件。 @Autowired:自动导入依赖的 bean @Service:一般用于修饰 service 层的组件 @Repository:使用@Repository 注解可以确保 DAO 或者 repositories 提供异 常转译,这个注解修饰的 DAO 或者 repositories 类会被 ComponetScan 发现并 配置,同时也不需要为它们提供 XML 配置项。

@Bean:用@Bean 标注方法等价于 XML 中配置的 bean。 @Value:注入 Spring boot application.properties 配置的属性的值。 @Inject:等价于默认的@Autowired,只是没有 required 属性; @Component:泛指组件,当组件不好归类的时候,我们可以使用这个注解进行 标注。 @Bean:相当于 XML 中的,放在方法的上面,而不是类,意思是产生一个 bean,并 交给 spring 管理。 @AutoWired:自动导入依赖的 bean。byType 方式。把配置好的 Bean 拿来用, 完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完 成自动装配的工作。当加上(required=false)时,就算找不到 bean 也不报 错。 @Qualifier:当有多个同一类型的 Bean 时,可以用@Qualifier(“name”)来指 定。与@Autowired 配合使用。 @Resource(name=”name”,type=”type”):没有括号内内容的话,默认 byName。与@Autowired 干类似的事。

1.2springMVC 相关注解

@RequestMapping:@RequestMapping(“/path”)表示该控制器处理所有 “/path”的 UR L 请求。RequestMapping 是一个用来处理请求地址映射的注 解,可用于类或方法上。 用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。 该注解有六个属性: 1. params:指定 request 中必须包含某些参数值是,才让该方法处理。 2. headers:指定 request 中必须包含某些指定的 header 值,才能让该方法 处理请求。 3. value:指定请求的实际地址,指定的地址可以是 URI Template 模式 4. method:指定请求的 method 类型, GET、POST、PUT、DELETE 等 5. consumes:指定处理请求的提交内容类型(Content-Type),如 application/json,text/html; 6. produces:指定返回的内容类型,仅当 request 请求头中的(Accept)类型 中包含该指定类型才返回 参数与大括号里的名字一样要相同。

1.3全局异常处理

@ControllerAdvice:包含@Component。可以被扫描到。统一处理异常。 @ExceptionHandler(Exception.class):用在方法上面表示遇到这个异常就 执行以下方法。

2.自动装箱原理

这个问的挺多的,考察对 SpringBoot 简化代码操作的整体认识,SpringBoot 自动装配为其省去很多代码和配置,属于 SpringBoot 框架的灵魂之一。 SpringBoot 之所以可以做到简化配置文件直接启动,无外乎是其内部的两种设 计策略:开箱即用和约定大于配置。 开箱即用:在开发过程中,通过 maven 项目的 pom 文件中添加相关依赖包,然 后通过相应的注解来代替繁琐的 XML 配置以管理对象的生命周期。 约定大于配置:由 SpringBoot 本身来配置目标结构,由开发者在结构中添加 信息的软件设计范式。这一特点虽降低了部分灵活性,增加了 BUG 定位的复杂 性,但减少了开发人员需要做出决定的数量,同时减少了大量的 XML 配置,并 且可以将代码编译、测试和打包等工作自动化。

3.跨域问题

如何解决 SpringBoot 的跨域问题,这是高频问题,还是考察解决实际问题的能 力,毕竟跨域是开发中绕不开的坎儿。 有四种常见的跨域解决办法,能随机回答几种就没问题

1. 实现 WebMvcConfigurer#addCorsMappings 的方法

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");
    }
}

2. 重新注入 CorsFilter

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * 解决跨域
 */
@Configuration
public class CorsFilterConfig {


    /**
     * 开启跨域访问拦截器
     *
     * @date 2021/4/29 9:50
     */
    @Bean
    public CorsFilter corsFilter() {
        //创建CorsConfiguration对象后添加配置
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        //设置放行哪些原始域
        corsConfiguration.addAllowedOrigin("*");
        //放行哪些原始请求头部信息
        corsConfiguration.addAllowedHeader("*");
        //放行哪些请求方式
        corsConfiguration.addAllowedMethod("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        //2. 添加映射路径
        source.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsFilter(source);
    }
}

3. 创建一个 filter 解决跨域

@Slf4j
@Component
@WebFilter(urlPatterns = { "/*" }, filterName = "headerFilter")
public class HeaderFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) resp;
        //解决跨域访问报错
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        //设置过期时间
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, client_id, uuid, Authorization");
        // 支持HTTP 1.1.
        response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
        // 支持HTTP 1.0. response.setHeader("Expires", "0");
        response.setHeader("Pragma", "no-cache");
        // 编码
        response.setCharacterEncoding("UTF-8");
        chain.doFilter(request, resp);
    }

    @Override
    public void init(FilterConfig filterConfig) {
        log.info("跨域过滤器启动");
    }

    @Override
    public void destroy() {
        log.info("跨域过滤器销毁");
    }
}

4. 使用 CrossOrigin 注解

@RestController
@RequestMapping("/eduoss/fileoss")
@CrossOrigin
public class OssController {

    @Autowired
    private OssService ossService;

    //上传头像的方法
    @PostMapping
    public R uploadOssFile(MultipartFile file) {
        //获取上传文件  MultipartFile
        //返回上传到oss的路径
        String url = ossService.uploadFileAvatar(file);
        return R.ok().data("url",url);
    }
}

4.SpringBoot 初始化环境变量流程

1、 调用 prepareEnvironment 方法去设置环境变量 2、 接下来有三个方法 getOrCreateEnvironment,configureEnvironment, environmentPrepared 3、 getOrCreateEnvironment 去初始化系统环境变量 4、 configureEnvironment 去初始化命令行参数 5、 environmentPrepared 当广播到来的时候调用 onApplicationEnvironmentPreparedEvent 方法去使用 postProcessEnvironment 方法 load yml 和 properties 变量

果果云点播中心

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值