Spring

Spring
什么是Spring框架?

Spring是一种轻量级框架,它是很多模块的集合,能够提高开发人员的开发效率。

怎么解决Spring循环依赖?

这三级缓存分别指:
singletonFactories : 单例对象工厂的cache
earlySingletonObjects :提前暴光的单例对象的Cache
singletonObjects:单例对象的cache

先到一级缓存中查询,没有就到二级,二级没有到三级。

列举一些重要的Spring模块?

Spring Core:基础,可以说Spring其他所有的功能都依赖于该类库。主要提供IOC和DI功能。

Spring AOP:提供面向切面的编程实现。

Spring JDBC:Java数据库连接。

Spring ORM:用于支持Mybatis等ORM工具。

Spring Web:为创建Web应用程序提供支持。

Spring Test:提供了对JUnit和TestNG测试的支持。

怎么理解Spring中的IOC容器?(强调创建对象)

IOC读作“控制反转”,是一种设计思想,作用是将原本再程序中手动创建对象的控制权交给Spring容器来管理。在没有Spring之前,我们需要在程序中手动创建对象,而有了SpringIOC后,我们可以用RestController,Service,Bean,Repository等注解来告诉Spring容器它需要创建哪些对象,再通过DI依赖注入将它们注入到需要使用的地方。

怎么理解Spring中的依赖注入(DI)?(强调Bean与Bean之间依赖关系)

通过@Autowired,@Resources注解注入由Spring容器创建好的对象。

怎么理解Spring中的AOP?

AOP称为面向切面编程,思想是在不改变的代码的情况下,动态的在某个方法之前或者之后干点事情。AOP的实现在于代理模式,Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理,JDK动态代理通过实现InvocationHandler接口调用invoke()方法反射来调用目标类中的代码,CGLIB通过生成目标类的一个子类对象来实现的。通常用于权限认证,日志,全局异常处理。

Spring通知类型有哪些?

前置通知:目标方法执行前执行

后置通知:目标方法执行后执行

环绕通知:也是在目标方法执行前执行,但可以控制是否调用目标方法执行(与前置的区别)

抛出异常后通知:在目标方法抛出异常后执行

最终:在目标方法执行后,无论是否抛出异常都会执行(与后置的区别)

@Value注解的作用是什么?

作用是给变量赋值。

三种用法:@Value(“8080”),@Value( p o r t ) , @ V a l u e ( {port}),@Value( port),@Value({port:8080}) 设置默认值,读不到就用后面设置的默认值

Spring 中 bean 的作用域有几种类型

bean的类型通常有两种:

单例:整个容器只有一个实例

原生:每次获取都会创建一个实例

添加作用域的两种方法:

<bean scope="">
@Scope(scopeName="")
Spring中的bean生命周期?

1.Bean容器找到配置文件中Spring Bean的定义。

2.Bean容器利用Java Reflection API创建一个Bean的实例。

3.如果涉及到一些属性值,利用set()方法设置一些属性值。

4.如果Bean实现了BeanNameAware接口,调用setBeanName()方法,传入Bean的名字。

5.如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader()方法,传入ClassLoader对象的实例。

6.如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory()方法,传入ClassLoader对象的实例。

7.与上面的类似,如果实现了其他*Aware接口,就调用相应的方法。

8.如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执行postProcessBeforeInitialization()方法。

9.如果Bean实现了InitializingBean接口,执行afeterPropertiesSet()方法。

10.如果Bean在配置文件中的定义包含init-method属性,执行指定的方法。

11.如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization()方法。

12.当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy()方法。

13.当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。

@Component 和 @Bean 有什么区别?

@Component、@Service和@Repository注解表明类会作为一个组件类,通过类路径自动扫描后自动装配到Spring容器中。

@Bean注解告诉Spring方法会返回一个对象,这个对象要注册为Bean。

相同点:目的都是为了将bean注册到Spring容器中。

不同点:@Component加到类上,@Bean是加在方法上,方法的名称作为id,方法的返回值作为值

Spring 依赖注入方式有哪些?

1.构造器注入

2.set方法注入

3.注解注入

在 Spring 中如何操作数据库?

1.JdbcTemplate

2.SpringdataJPA

Spring 中的 Bean 是线程安全的吗?
首先,什么是线程安全?

在多个线程共享同一个资源的情况下,如果都能始终表现正确的话就是线程安全的,否则就是不安全的。

那么怎么保证线程安全?

用锁来保证多线程下资源的线程安全。

如果Bean是单例类型的,那么 Spring 中的 Bean就不是线程安全的,因为多个线程共享同一个单例实例Bean,可以用ThreadLocal保存需要使用的变量。

如果是原生类型的,那么 Spring 中的 Bean就是线程安全的。

Spring 有哪些优点?

轻量级,IOC,AOP,事务管理,容器和MVC框架

Spring、SpringMVC、SpringBoot、SpringCloud 的区别是什么

Spring:提供基础服务,IOC,AOP,事务

SpringMVC:Spring提供对Web的一个支持(封装了Servlet的框架)

SpringBoot:SpringBoot是快速搭建Spring应用的一种方式,拥有起步依赖和自动装配的特性,大大简化了开发,融入了约定大于配置的思想

SpringCloud:基于SpringBoot的微服务解决方案

Spring 中使用的设计模式有哪些
你了解设计模式吗?设计模式有什么用?

了解,设计模式针对特定问题提供了很多最佳实践方案。

你知道的设计模式有哪些?

设计模式共有23种,分为三类

创建型:工厂模式,单例模式,建造者模式。

结构型:代理模式,适配器模式,装饰者模式。

行为型:模板模式,观察者模式,责任链模式。

你项目中用过设计模式吗?你熟悉的框架中用了哪些设计模式?

Spring:

1.单例模式(Spring下默认的bean均为单例)

2.工厂模式(Spring使用工厂模式通过FactoryBean创建Bean对象)

3.代理模式(Spring AOP就是基于动态代理实现的)

4.适配器模式(Spring AOP中通知使用了适配器模式)

5.模板模式(JDBCTemplate,RedisTemplate等使用了模板模式)

6.观察者模式(ApplicationListenner监听,当一个对象状态改变时,其他依赖它的对象也要及时更新)

7.包装器模式(Wrapper,动态的给一个对象添加一些额外的职责,例如连接多个数据库需要用到包装器模式动态切换数据源)

MVC:

责任链模式(拦截器执行和请求的处理)

说说自己对于Spring MVC的了解?

MVC是一种设计模式,Spring MVC是一款很优秀的MVC框架。Spring MVC下我们一般把后端项目分为Service层(处理业务)、Dao层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台页面)。

简述一下 Spring MVC 的执行流程?

1.DisPatchServlet:首先所有的请求都要经过前端控制器进行分发。

2.HandlerMapping:然后分发到HandlerMapping,从中遍历出请求对象中对应接口的Handler对象。

3.HandlerExecutionChain:包含拦截器和要请求的Handler对象。

4.HandlerAdapter:用来调用Controller方法。

5.执行拦截器前置方法。

6.调用HandlerAdapter对象执行Controller方法,并返回ModelAndView对象,这里面包含了视图名称。

7.执行拦截器后置方法。

8.ViewResolve:视图解析器,根据ModelAndView对象获取视图名称,根据视图名称获取视图解析对象,渲染视图。

9.执行拦截器视图解析完成后方法。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fSOBGzjH-1672021422387)(D:/DOWNLOAD/TXT/SpringMVC.png)]

Spring MVC 的常用注解有哪些?

@Controller(定义了一个控制器类,包扫描)

@RestController(@Controller+@ResponseBody)

@RequestMapping(处理请求地址映射)

@ResponseBody(返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用)

@RequestBody(读取request请求的body部分的数据, 解析后, 把相应的数据绑定到请求处理方法的参数上.)

@RequestParam(将请求参数区数据映射到参数上)

@Pathvariable(取出uri模板中的变量作为参数,如/user/{id})

@Autowire(按照类型(byType)装配依赖对象),Resources(ByName自动注入)

@CookieValue(用来获取Cookie中的值)

@SessionAttributes(将值放到session作用域中)

拦截器的使用场景有哪些?

日志,事务,权限验证,登录拦截,全局异常等

什么是RestFUL的风格?

Rest是一种新的架构模式。

资源的定位:URL

资源的操作:METHOD

PUT:添加

POST:修改

GET:查询

DELETE:删除

Spring容器和SpirngMVC容器有什么关系 ?

Spring容器是父容器,SpringMVC是子容器,子容器可以访问父容器,而父容器不能访问子容器。

Spring管理的Bean有:Service,Dao,数据源,事务,整合第三方框架,代理。

SpringMVC管理的Bean有:Controller,视图解析器,拦截器,JSON转换器,静态资源转换。

Spring MVC 中如何在后端代码中实现页面跳转?

1.直接返回视图名,视图解析器会自动添加前缀和后缀。

2.转发,return “forward:ok.jsp”。

3.重定向,return “redirect:ok.jsp”。

SpirngMVC对异常的处理方式有哪些?

1.全局异常

2.@Controlleradvice,@RestControlleradvice

3.@ExceptionHandler

autowired 和resource区别是什么?

1.相同点

都可以完成自己注入。

如果存在多个实例,默认注入的是bean的名字变量的名称。

2.不同点

autowired默认按照类型注入的,resource默认按照名称注入。

存在多个Bean的情况下,指定注入哪个Bean由@Resource通过name属性指定。

存在多个Bean的情况下,指定注入哪个Bean需要Qualifier指定。

存在多个Bean的情况下,可以用@Primary指定优先级。

Spring 有几种实现事务的方式?

1.编程式事务,我们需要在代码中调用beginTransaction()、commit()、rollback()等事务管理相关的方法,这就是编程式事务管理。

2.声明式事务,@Transactional

什么是Spring事务?事务有哪几个特性?

数据库操作的最小工作单元

事务特性(4种):
原子性 (atomicity):强调事务的不可再分.
一致性 (consistency):事务执行的前后状态保持一致.
隔离性 (isolation):事务和事务之间的隔离级别
持久性(durability) :事务一旦提交,对数据的修改是永久性的

Spring 的 JdbcTemplate 对象和 JDBC 有什么区别?

JDBC(Java DateBase Connectivity)又称为java数据库连接,是一个执行SQL语句的Java Api。

JDBCTemplate是对JDBC的封装,大大简化了数据库的操作。

Spring 事务隔离级别有哪些?

读未提交:脏读,不可重复读,幻读有可能发生。

读已提交:不可重复读,幻读有可能发生。

可重复读:幻读有可能发生。

串行化:花费较高但是比较可靠的事务隔离级别,避免出现上述的读问题。

由于隔离级别不同产生的问题:

脏读:读到了另一个事务没有提交的数据

不可重复读:在同一个事务中多次读取的数据不一致,读到了另一个事务已经提交的数据

幻读:一个事务在做批量修改,另一个事务在做添加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f7gf2UNB-1672021422388)(SpringMVC.assets/image-20210810210807492.png)]

Spring事务中有哪几种事务传播行为?

在TransactionDefinition接口中定义了八个表示事务传播行为的常量。

支持当前事务的情况:

PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)。

不支持当前事务的情况:

PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。

PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。

PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。

其他情况:

UIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)。

不支持当前事务的情况:

PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。

PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。

PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。

其他情况:

PROPAGATION_NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于PROPAGATION_REQUIRED。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值