Springboot基础

Springboot

1.SpringBoot 是什么?为什么我们选择使 SpringBoot 开发

Spring Boot 被称为搭建程序的脚手架。其最主要作用就是帮我们快速的64构建庞大的 spring 项目,并且尽可能的减少一切 xml 配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。 传统的 Java 语言开发一直被人认为是臃肿和麻烦的,主要原因是:复杂的配置和一个混乱的的依赖管理。而 Spring Boot 简化了基于 Spring 的应用开发,只需要“run”就能创建一个独立的、生产级别的 Spring 应用。Spring Boot 为 Spring 平台及第三方库提供开箱即用的设置(提供默认设置,存放默认配置的包就是启动器 starter),这样我们就可以简单的开始。多数 Spring Boot 应用只需要很少的 Spring 配置。

2.SpringBoot 自动配置的原理

1.@EnableAutoConfiguration 这个注释告诉 SpringBoot“猜”你将如何想配置 Spring,基于你已经添加 jar 依赖项。如果 spring-boot-starter-web 已经添加 Tomcat 和 Spring MVC,这个注释自动将假设您正在开发一个 web 应用程序并添加相应的 spring 设置。会自动去 maven 中读取每个 starter 中的spring.factories 文件 该文件里配置了所有需要被创建 spring 容器中的 bean.使用@SpringBootApplication 注解 可以解决根类或者配置类(我自己的 说法,就是 main 所在类)头上注解过多的问题,一个@SpringBootApplication 相当于@Configuration,@EnableAutoConfiguration 和@ComponentScan 并具有他们的默认属性值

3.springboot 常见的注解

@Configuration 把一个类作为一个 IoC 容器,它的某个方法头上如果注册了

@Bean,就会作为这个 Spring 容器中的 Bean。

@Scope 注解 作用域

@Lazy(true) 表示延迟初始化

@Service 用于标注业务层组件.@Controller 用于标注控制层组件(如 struts 中的 action)

@Repository 用于标注数据访问组件,即 DAO 组件。

@Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Scope 用于指定 scope 作用域的(用在类上)

@PostConstruct 用于指定初始化方法(用在方法上)

@PreDestory 用于指定销毁方法(用在方法上)

@Resource 默认按名称装配,当找不到与名称匹配的 bean 才会按类型装配。

@DependsOn:定义 Bean 初始化及销毁时的顺序

@Primary:自动装配时当出现多个 Bean 候选者时,被注解为@Primary 的 Bean将作为首选者,否则将抛出异常

@Resource 默认按名称装配,当找不到与名称匹配的 bean 才会按类型装配。

@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合

@Qualifier 注解一起使用。如下:@Autowired@Qualifier(“personDaoBean”)存在多个实例配合使用

@ImportResource 注解导入老 Spring 项目配置文件。

4.Spring Boot 中如何解决跨域问题 ?

跨域可以在前端通过 JSONP 来解决,但是 JSONP 只可以发送 GET 请求,无法发送其他类型的请求,在 RESTful 风格的应用中,就显得非常鸡肋,因此我们推荐在后端通过 (CORS,Cross-origin resource sharing) 来解决跨域问题。这种解决方案并非 Spring Boot 特有的,在传统的 SSM 框架中,就可以通过 CORS 来解决跨域问题,只不过之前我们是在 XML 文件中配置 CORS ,现在可以通过实现WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。

@Configuration
public class CorsConfig implements WebMvcConfigurer {

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

项目中前后端分离部署,所以需要解决跨域的问题。
我们使用cookie存放用户登录的信息,在spring拦截器进行权限控制,当权限不符合时,直接返回给用户固定的json结果。
当用户登录以后,正常使用;当用户退出登录状态时或者token过期时,由于拦截器和跨域的顺序有问题,出现了跨域的现象。
我们知道一个http请求,先走filter,到达servlet后才进行拦截器的处理,如果我们把cors放在filter里,就可以优先于权限拦截器执行。

@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
    CorsConfiguration corsConfiguration = new CorsConfiguration();
    corsConfiguration.addAllowedOrigin("*");
    corsConfiguration.addAllowedHeader("*");
    corsConfiguration.addAllowedMethod("*");
    corsConfiguration.setAllowCredentials(true);
    UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
    urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
    return new CorsFilter(urlBasedCorsConfigurationSource);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值