java面试题——spring

使用Spring的优点?
1.降低组件之间的耦合性,实现了软件之间的解耦。
2.可以使用提供的众多服务,比如事务管理,消息服务等等。
3.容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能。

谈谈你对Spring的理解?
Spring是一个优秀的轻量级框架,提高了项目的开发管理和维护,他主要有两大核心模块,一个ioc,一个是aop。
Ioc就是控制反转的意思,是一种设计思想,就是将手动创建对象的控制权,交给Spring来管理。通过ioc容器在程序运行期间基于java反射机制,动态的创建对象,建立对象之间的依赖关系,管理对象的生命周期。
Aop是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护。简单来说就是统一处理某个类的问题的编程思想,比如统一处理日志,异常等。

解释一下SpringAOP中的几个名词?
切面:切面是指封装共同处理的组件,这个组件被作用到其他目标方法上。
目标:目标是切面所作用的对象
切入点:切入点是指哪方法使用切面功能
通知:通知是指定切面和目标作用的时机。

Spring中有哪几种通知类型?
前置通知,后置通知,最终通知,异常通知,环绕通知。

BeanFactory和ApplicationContext有什么区别?
BeanFactory和ApplicationContext都是Spring的两大核心接口,都可以当作Spring的容器。
BeanFactory是Spring的原始接口,实现类功能比较单一,每次获取对象时才会创建对象。
ApplicationContext接口继承了BeanFactory接口,拥有BeanFactory的全部功能,扩展了很多高级特性,每次容器启动时就会创建所有的对象。

列举一些重要的Spring模块?
Spring Core、Spring Context、Spring Aop、Spring JDBC、Spring Web MVC、
Spring ORM、Spring Web、Spring Test。

Spring中实例化Bean的方式?
第一种:使用构造器实例化Bean。
第二种:使用静态工厂方法实例化bean。
第三种:使用实例工厂方法实例化Bean。

Spring中Bean的生命周期?
Spring bean的生命周期主要有四个阶段,分别是:实例化-初始化-使用-销毁
1.首先实例化一个Bean
2.根据Spring上下文对实例化的Bean进行配置。
3.如果这个Bean实现了BeanNameAware接口,会调用它实现的setBeanName方法设置id。
4.如果这个Bean实现了BeanFactoryAware接口,会调用它实现的setBeanFactory,传递的是spring工厂本身。
5.如果这个Bean关联了BeanPostProcessor接口,会调用PostProcessBeforeInitialization()方法。
6.如果配置了init-method属性会自动调用初始化方法。
7.当Bean不在需要时,会调用destory()方法。
8.如果配置了destory-method属性,会自动调用其配置的销毁方法。

Spring中单例模式如何保证线程安全?
可以使用 ThreadLocal ,ThreadLocal 是线程本地变量,每个线程拥有变量的一个独立副本,所以各个线程之间互不影响,保证了线程安全。

@Component和@Bean的区别是什么?
管理Bean分为两个部分,一个是注册Bean,一个是装配Bean,有三种实现方式:一种是使用自动装配,一种是使用JavaConfig,还有一种是XML配置的方式,而@Component作用就相当于xml配置,@Bean需要在配置类中使用,类上需要加上@Configuration注解,两者都可以通过@Autowired装配。
将一个类声明为Spring的Bean的注解有哪些?
使用@Autowired注解。如果需要把类标识成@Autowired注解自动装配的Bean的类,可以采用@Component、@Repository、@Service、@Controller实现。

Spring框架中的单例Bean是线程安全的吗?
Spring并没有对单例bean进行任何多线程的封装处理。大多数的bean并没有可变的状态,所以是线程安全的。如果bean有多种状态的话,就需要自行保证线程安全。最简单的解决方法就是将bean的作用域由“singleton”变更为“prototype”。

Spring中Bean的作用域?
1.singleton:IOC容器只创建一个Bean实例,每次返回的是同一个Bean实例。
2.Prototype:IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。
3.Request:只对HTTP请求生效,每次都会创建一个新的Bean。
4.Session:只能用于HTTPSession,同一个Session共享一个Bean的实例,不同Session使用不同的实例。
5.global-session:只能用于HttpSession,和Session不同的是,所有Session共享一个Bean实例。

Spring自动装配bean的几种方式?
byName:根据bean的名称注入对象依赖项
ByType:根据类型注入对象依赖项
构造函数:通过构造器注入依赖项,需要设置大量的参数
Spring注入bean的几种方式?
通过注解注入、通过构造方法注入、通过Set方法注入、通过属性注入、通过List、Map注入。

Spring事务管理的方式有几种?
编程式事务管理,声明式事务管理.

Spring事务中的隔离界别有哪几种?
事务特性:ACID(原一隔持): 原子性,一致性,隔离性,持久性
① 默认的:这是个 PlatfromTransactionManager 默认的隔离级别,使用数据库默认的事务隔离级别。
② 读未提交,允许另外一个事务可以看到这个事务未提交的数据。
③ 读已提交,保证一个事务修改的数据提交后才能被另一事务读取,而且能看到该事务对已有记录的更新。
④ 可重复读,保证一个事务修改的数据提交后才能被另一事务读取,但是不能看到该事务对已有记录的更新。
⑤ 串行读,一个事务在执行的过程中完全看不到其他事务对数据库所做的更新。

Spring事务中有那几种事务传播行为?
① Required:如果当前没有事务,就创建一个新事务,如果有事务,就加入该事务。
② Required_new:无论有没有事务,都创建新事务。
④ Supports:支持当前事务,如果当前有事务,就加入该事务,如果当前没有事务,就以非事务执行。
⑤ Not_supported:以非事务方式执行操作,如果当前有事务,就把当前事务挂起。
⑥ Never:以非事务方式执行,如果当前存在事务,则抛出异常。

SpringWebMVC的核心组件?
DispatcherServlet(控制器,请求入口)
HandlerMapping(控制器,请求派发)
Controller(控制器,请求处理流程)
ModelAndView(模型,封装业务处理结果和视图)
ViewResolver(视图,视图显示处理器)

说说你对SpringMVC的了解?
SpringMvc是基于过滤器对servlet进行了封装的一个框架,我们使用的时候就是在webXml文件中配置DispatcherServlet类,通过这个类处理接受到的请求。

SpringWebMVC的处理流程?
浏览器向Spring发出请求,请求交给前端控制器DispatcherServlet处理,前端控制器通过HandlerMapping找到相对应的Controller组件完成其约定的方法,然后返回一个ModelAndView对象,封装业务处理结果。控制器接收到ModelAndView之后,调用ViewResilver组件,定位View并传递数据信息,最终生成响应结果。

@RequestMapping作用?
将HTTP请求映射到相应的类或者方法上。

@Autowired作用?
可以对类,成员变量,方法及构造器进行标注,完成自动装配的工作,通过@Autowried的使用消除getset方法。

@Autowried与@Resource区别?
@Autowried是Spring自己定义的,@Resurce是属于J2ee
@Autowried默认是按照类型装配的。默认情况下要求装配对象必须存在,如果允许null值,可以设置required属性为false。@Resurce是按照名称装配的。可以按照name和type属性指定,如果没有指定,默认按照字段名称进行查找,如果名称找不到时会按照类型进行装配。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值