面试总结5.25

1.@Autowired 与@Resource的区别

1.@Autowired是Spring提供的,@Resource是J2EE提供的。

2.@Autowired默认是通过byType方式注入,@Resource默认是通过byName注入的。

3.@Autowired注解注入的对象需要在IOC容器中存在,否则需要加入属性required=false,表示忽略当前注入的bean,如果直接注入没有跳过,则会跳过。

byName:通过bean的id或者name注入;ByType:通过bean的class注入。

@Autowired默认注入的方式是byType,如果有两个相同类型的bean则ByName注入。

如果有两个相同name的bean,则通过@Qualifier指定bean的name。

@Resource默认通过ByName注入,如果两个bean的name相同则通过ByType注入。如果还是相同则通过name和Type属性指定。

注意:虽然默认是通过ByName注入,但是还是会校验Type,如果Type不一致则会报BeanCreationException异常。

2.Spring Boot的核心注解

1.首先是main方法。

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

其中@SpringBootApplication是一个组合注解,其中最主要的是@Configuration,@ComponentScan,@EnableAutoConfiguration这三个注解。

@Configuration:注解用来标识这个类可以使用Spring IOC作为Bean定义的来源。

@Component Scan:功能是自动扫描并且加载符合条件的组件,可以通过basePackages等属性来制定范围,如果不指定会从声明@ComponentScan所在类的包进行扫描。

@EnableAutoConfiguration借助@import将所有符合自动加载条件的bean加载到ioc容器里。

实现自动配置的工具类:SpringFactoriesLoader

3.Spring boot读取properties的几种方式?有什么区别?

1.@Value

2.@ConfigurationProperties

3.Environment

4.PropertiesLoaderUtils

4.Spring启动时会干什么?

1.通过DispatcherServletAutoConfiguration往spring容器中注入DispatcherServlet
2.DispatcherServlet被包装为DispatcherServletRegistrationBean,用于向Servlet容器中注册
3.在Tomcat创建阶段,将ServletContainerInitializer接口的实现类(即selfInitialize方法)设置到TomcatStarter中
4.把TomcatStarter注册到Tomcat中
5.Tomcat启动后,会调用ServletContainerInitializer#onStartup,即调用TomcatStarter#onStartup,接着调用ServletWebServerApplicationContext#selfInitialize
6..selfInitialize方法回调用ServletContextInitializer#onStartup方法
7..DispatcherServletRegistrationBean实现类ServletContextInitializer接口,所以会调用父类的
RegistrationBean#onStartup方法
8.在RegistrationBean#onStartup方法中会把内部维护的Servlet,Listener,Filter注册到ServletContext中

另外一种概况性的,面试时可以这么回答:

其实就是 SpringBoot 在启动的时候,按照约定去读取 SpringBoot Starter 的配置信息,再根据配置信息对资源进行初始化,并注入到 Spring 容器中。这样 SpringBoot 启动完毕后,就已经准备好了一切资源,使用过程中直接注入对应 Bean 资源即可。

5.Springboot核心配置文件?

SpringBoot 的核心配置文件是 application 和 bootstrap 配置文件。

application 配置文件这个容易理解,主要用于 SpringBoot 项目的自动化配置。

bootstrap 配置文件有以下几个应用场景。

使用 Spring Cloud Config 配置中心时,这时需要在 bootstrap 配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;

一些固定的不能被覆盖的属性;

一些加密/解密的场景;

6.用for循环删除list中的指定元素会发生什么?

会报 ConcurrentModificationException 异常。这是因为当使用 foreach(for(Integer i : list)) 语句时,会自动生成一个iterator 来遍历该 list,但同时该 list 正在被 Iterator.remove() 修改。Java 一般不允许一个线程在遍历 Collection 时另一个线程修改它。

7.spring boot 配置文件的加载顺序?

由jar包外向jar包内进行寻找;

优先加载带profile

jar包外部的application-{profile}.properties或application.yml(带spring.profile配置文件

jar包内部的application-{profile}.properties或application.yml(带spring.profile配置文件

再来加载不带profile

jar包外部的application.properties或application.yml(不带spring.profile配置文件

jar包内部的application.properties或application.yml(不带spring.profile配置文件

8.多线程下的Start和run方法?

1.都是lang包下的,Start继承的是Thread类,run继承的Runnable类。

2.Start方法用于启动线程,而run方式是用来执行线程的运行时代码,run可以重复调用,start只能调用一次

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值