java框架(待补充)

1.Spring常用注解

@Service、@Repository、@Component、@Autowired、@Transactional

@Autowired默认时根据类型注入的(bytype),@Resouce默认时根据设置的名称注入的(byname)

2.自定义注解应用场景

检验(统一登录校验)

日志(解耦)

是否启动动态数据

读写分离

是否实现策略模式

统一操作

固定传递参数(是否必传、正则校验)

2.bean加载过程(bean的生命周期)?

1.首先容器启动后,会对scope为singleton且非懒加载的bean进行实例化,

2.按照Bean定义信息配置信息,注入所有的属性

3.如果Bean实现了BeanNameAware接口,会回调该接口的setBeanName()方法,传入该Bean的id,此时该Bean就获得了自己在配置文件中的id,

4.如果Bean实现了BeanFactoryAware接口,会回调该接口的setBeanFactory()方法,传入该Bean的BeanFactory,这样该Bean就获得了自己所在的BeanFactory,

5.如果Bean实现了ApplicationContextAware接口,会回调该接口的setApplicationContext()方法,传入该Bean的ApplicationContext,这样该Bean就获得了自己所在的ApplicationContext

6.如果有Bean实现了BeanPostProcessor接口,则会回调该接口的postProcessBeforeInitialzation()方法(重要,Spring 的 AOP 就是利⽤它实现的。)

7.如果Bean实现了InitializingBean接口,则会回调该接口的afterPropertiesSet()方法,

8.如果Bean配置了init-method方法,则会执行init-method配置的方法,

9.如果有Bean实现了BeanPostProcessor接口,则会回调该接口的postProcessAfterInitialization()方法

10.经过流程9之后,就可以正式使用该Bean了,对于scope为singleton的Bean,Spring的ioc容器中会缓存一份该bean的实例,而对于scope为prototype的Bean,每次被调用都会new一个新的对象,期生命周期就交给调用方管理了,不再是Spring容器进行管理了

11.容器关闭后,如果Bean实现了DisposableBean接口,则会回调该接口的destroy()方法

12.如果Bean配置了destroy-method方法,则会执行destroy-method配置的方法,至此,整个Bean的生命周期结束

IOC、AOP(知识点延伸相关代码原理,应用场景)?

IOC缺点?

反射对象机制,实例化对象

(对性能有一定影响,创建对象过程变得复杂)

3.IOC、AOP使用到的设计模式(模板方法,观察者,代理,适配器,单例,工厂)?

IOC使用到的设计模式

  工厂模式:通过 BeanFactory或ApplicationContext创建 bean 对象

  单例模式:bean的默认作用域就是singleton(单例)的

  观察者模式:Spring 的Event事件驱动模型就是观察者模式

  装饰者模式:Spring的Wrapper相关的类使用到了装饰者模式

  策略模式:Spring的Bean初始化的Strategy相关的类使用到了策略模式

AOP使用到的设计模式

  代理模式:如果被代理类实现了接口,使用JDK动态代理,否则使用Cglib动态代理

  适配器模式:AOP的Advice(通知)使用到了适配器模式

springMVC、spring、spring-boot、spring-cloud区别?

Spring基础平台,提供了IOC和AOP等基础能力,还提供众多框架的整合能力

Spring MVC是Spring的一部分,依托Spring的基础能力提供了Web支持能力

Spring Boot是为了简化Spring的开发,提供了自动装配能力,可以简化配置和依赖管理,开箱即用

Spring Cloud以Spring Boot为基础,提供了众多组件,可以快速开发分布式微服务应用

4.Spring-cloud 常用组件(技术选型优缺点 对哪个组件理解比较深)?

Spring Cloud Netflix组件

   Zuul:网关组件,是微服务的入口,提供了过滤,认证,路由转发等重要能力,性能稍差

   Eureka: 注册中心,提供了服务注册,服务发现等服务管理能力,AP保证强一致性

   Ribbon: 负载均衡组件,内置多个负载算法提供了服务节点的负载调用能力

   Hystrix: 熔断器,提供了服务熔断,服务降级等服务保护于请求兜底能力

   Feign: 接口调用,以HTTP的方式提供了服务接口的暴露与调用,相比RPC性能稍差

Spring Cloud 官方组件

   Spring Cloud GateWay: 网关组件,相比Zuul,还提供了WebFlux支持

   Spring Cloud Config: 配置中心,将配置与应用解耦,统一管理,方便维护

   Spring Cloud OpenFeign: 增强接口调用,整合了Ribbon,Hystrix和Feign,并可以使用SpringMVC注解

Spring Cloud Alibaba组件

   Nacos: 注册中心与配置中心,提供了服务注册,服务发现,配置管理等功能,同时支持CP与AP

   Seata: 分布式事务组件,解决分布式微服务调用链的事务问题,但是seata会造成数据的脏读

   Sentinel: 流量哨兵,与Hystrix相似,除熔断降级外,还提供流量控制、系统负载保护等功能

5.Hibernate、spring-data-jpa、mybatis关系?

JPA全称Java Persistence API,是Java提供的一套持久层规范,不是具体的实现方案

Hibernate是一个实现了JPA的规范ORM框架,提供了对象与关系表的映射

Spring Data JPA是Spring定义的封装了JPA规范的更加简单持久层规范,具体实现依赖Hibernate框架,相比直接使用Hibernate,Spring Data JPA更加简单

Hibernate是对象与关系表的映射,可以用面向对象的方式完成数据库操作

Spring Data JPA可以用更简单的方式使用Hibernate,同时也可以更方便写原生SQL语句

Mybatis是一个轻量级的持久层框架,入门容易,需要编写原生SQL语句

技术选型考虑要点:是否快速开发(jpa)、上手程度(mybatis)、jpa自动生成表、是否切换数据库(hibernate、jpa)

Mybatis #和 $区别

#采用预处理带有占位符防止sql注入

其中${}比较特殊,他的应用场景是需要动态传入表名或列名时使用

你可能感兴趣的:(java)