Java面试之Springboot

1、SpringBoot自动装配的原理?

Springboot的入口是SpringbootApplication,该类加了一个注解@SpringbootApplication,它是一个组合注解,其实内部是:

  • @SpringBootConfiguration 

跟@Configuration一样,用于定义配置类,会将其内部有一个或多个@Bean标注的方法实例加入到Spring容器中。

  •  @ComponentScan

指定扫描的路径,把符合扫描规则的类加载到Spring容器中。

  • @EnableAutoConfiguration

该注解下有一个@Import注解,该注解引入了自动配置选择器,该选择器会自动导入META-INF/spring.factories 里定义的自动配置类。

@Bean和@Component的区别,前者作用在方法上,一般配合@Configuration一起使用,更加灵活;后者只能作用在类上。

2、SpringBoot核心注解是哪几个?

@Configuration

表明该类是一个配置类,一般跟@Bean一起使用,相当于Spring里的一个xml配置文件。此外除了@Bean之外,要想给容器中注册组件还有@Component @Controller @Service @Repository

@Import({类名 .class, 类名.class}) 

给容器中导入组件

@Conditional

条件注解,当满足某些条件才会导入组件,其下有很多派生类

@ImportResource("classpath:XXXBean.xml")

直接把xml资源导入

@ConfigurationProperties(prefix = "mycar")

用于配置绑定,要使用该功能首先得在.properties文件中写好配置,然后再通过@Component把要绑定的java类加入到容器中。

3、SpringBoot如何解决跨域问题?

1)通过在类或者方法上加注解@CrossOrigin,前者是类下所有方法都可实现跨域,后者是之针对方法;

2)实现WebMvcConfigurer接口中的addCorsMappings()方法来实现

	@Configuration
    public class WebConfig implements WebMvcConfigurer {

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

3)也可以通过CorsFilter组件进行过滤

@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);
    }
 
}

 之所以有跨域这个概念是因为浏览器在设计之初为了安全起见规定只要 协议(http/https等)、域名、端口有一个不同就是跨域,反之则为同源策略。

4、Springboot监控Actuator

首先加入依赖

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

其次在yml中配置好

management:
  endpoints:
    enabled-by-default: true #暴露所有端点信息
    web:
      exposure:
        include: '*'  #以web方式暴露

5、如何维护API文档?

用Swagger2

6、SpringBoot 如何实现热部署 ?

只需要在pom文件下加入devtools依赖就可以了


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

7、SpringBoot中如何实现定时任务 ?

1)首先要在SpringbootApplication加上 @EnableScheduling 注解;

2)然后在Service下的方法加上@Scheduled(cron="0/3 * * * * 0-7")注解,其中cron表达式规定了执行周期,时间用空格分开,顺序是:秒 分 时 日 月 周几。

@Service
public class ScheduledService {

    /**
     * cron表达式:秒 分 时 日 月 周几
     */
    @Scheduled(cron = "0/3 * * * * 0-7")
    public void helloScheduled(){
        System.out.println("定时调度");
    }

}

8、Springboot如何打包部署?

首先引入maven-plugin


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

然后IDEA点击右边的package就可以打包了

然后再控制台直接运行jar包就好了

java -jar XXX.jar

9、请解释一下什么事IOC,并简易的描述一下Spring原理

10、简单说一下Shiro怎么使用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值