★1.Spring和SpringBuffer和SpringBuilder的区别?
①值可变性
Spring中的值是final修饰的,不可变,当试图修改这个不可变值时等于创建一个新的对象。
SpringBuffer和SpringBuilder则是可变的
②线程安全性
Spring: 值不可改 (安全)
SpringBuffer: 自带Synchernized锁 (安全)
SpringBuilder: 值可改,无锁 (不安全)
③性能
Spring: 每次修改创建新对象 (效率最慢)
SpringBuffer: 值可改但自带锁 (效率高于Spring但低于SpringBuilder)
SpringBuilder: 值可改,无锁 (效率最快)
2.Spring Boot常用注解
@SpringBootApplication: SpringBootConfiguration配置类、componentScan扫描包、EnableAutoConfiguration导入其他配置类
@RestController: @ResponseBody和@Controller的作用。
@Component,@Service,@Controller,@Repository: 将类注入容器。
@GetMapping、@PostMapping、@PutMapping、@DeleteMapping: 映射请求,只能接收的对应的请求。
@AutoWired: 按照类型匹配注入。
@Qualifier: 和AutoWired联合使用,在按照类型匹配的基础上,在按照名称匹配。
@Resource: 默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行按照名称查找,如果按照name找不到,就按照类型去找.
@Bean: 用于将方法返回值对象放入容器。
@RequestParam: 获取查询参数。即url?name=这种形式
@RequestBody: 该注解用于获取请求体数据(body),get没有请求体,故而一般用于post请求。@PathVariable: 获取路径参数。即url/{id}这种形式。
@Value: 将外部的值动态注入到 Bean 中。
@Value(“${}”):可以获取配置文件的值。
@Value(“#{}”):表示SpEl(Spring Expression Language是Spring表达式语言,可以在运行时查询和操作数据。)表达式通常用来获取 bean 的属性,或者调用 bean 的某个方法
★3.Spring AOP 和 IOC 的理解?
AOP(一种编程范式)
重用代码: 允许在其他类或方法中共享代码
简化代码: 将横切关注点与业务逻辑分离.(利于业务代码的理解和维护)
封装切面逻辑: 讲切面逻辑封装到一个模块中,并应用于整个应用程序.(利于维护和测试)
提高性能: AOP的好处就是提高系统的整体性能
松耦合: 让组件之间的依赖更松散.(利于代码复用,也利于单元测试和集中测试)
IOC(一种设计模式)
Bean容器 依赖注入(构造器注入、Setter注入、属性注入等) 控制反转 松耦合
★4.Spring IOC容器的构建流程?
1.配置元数据:根据XML或注解等方式配置IOC容器所需的元数据;例如Bean定义,依赖关系等
2.加载配置:使用BeanFactory等Spring接口,读取配置元数据
3.创建Bean实例:通过元数据的Bean定义等,用反射机制实例化创建Bean实例并储存IOC中
4.处理依赖关系:根据依赖关系,自动注入所需依赖
5.初始化Bean对象:调用Bean的初始化方法进行初始化,如init()方法
6.提供Bean:将初始化的Bean储存IOC容器,提供访问接口供程序使用
7.销毁Bean:IOC容器关闭时,调用所有Bean的销毁方法,如destory()方法
★5.Spring框架哪些地方使用了反射?
1.依赖注入: Spring基于反射机制获取对象并进行属性注入
2.AOP: Spring的JDK动态代理或者CGLIB字节码增强都是用的被代理对象方法的反射调用
3.MVC框架: Spring用反射机制来调用控制器方法
4.数据库访问: Spring是利用反射来进行数据库的访问
5.容器管理: Spring用反射机制来进行实例化和属性注入
★6.Spring MVC框架 ?
核心组件
DispatcherServlet :核心的中央处理器,负责接收请求、分发,并给予客户端响应。
HandlerMapping :处理器映射器,根据 uri 去匹配查找能处理的 Handler ,并会将请求涉及到的拦截器和 Handler 一起封装。
HandlerAdapter :处理器适配器,根据
HandlerMapping
找到的Handler
,适配执行对应的Handler
;Handler :请求处理器,处理实际请求的处理器。
ViewResolver :视图解析器,根据
Handler
返回的逻辑视图/视图,解析并渲染真正的视图,并传递给DispatcherServlet
响应客户端
★7.Spring中的Bean什么时候被实例化?
1. 单例作用域(Singleton): Spring容器启动时,立刻实例化单例作用域的Bean放置容器中,以便随时取用
2. 原型作用域(Prototype):请求时,才会实例化原型作用域的Bean并返回
3. 其他作用域:如 Web 作用域和 Session 作用域等,它们的实例化时间依赖于具体的使用场景。
★8.Spring 注册Bean的方式有哪些?
1. XML配置:使用Java配置类来注册Bean,通过在Java配置类中用@Configuration注解来声明配置类,并在配置类中使用@Bean注解来定义Bean的属性和实例化方式。
2. 基于注解:使用注解快捷方便的注册Bean.例如@Service @Contorller @Repository等。
3. 手动注册:用ApplicationContext接口提供的方法,如registerBeanDefinition()或者registerSingleton()来注册Bean。
★9.Spring 拦截器执行流程
★10.BeanFactory和FactoryBean的区别:
BeanFactory: 是Bean工厂,用于生产和管理普通的Bean对象,负责创建和提供Bean实例
FactoryBean: 只是一个特殊的接口,能自定义创建Bean对象,并控制这个Bean的创建过程
★11.Spring Cloud 和 Dubbo的区别:
性能:dubbo,RPC (TCP) spring cloud (http)
跨语言: dubbo 只能在JAVA领域 spring cloud 可以跨多语言(C,JAVA,Python等)
序列化: dubbo dubbo协议 spring cloud json
注册中心: dubbo zookepper spring cloud nacos