Java面试题-Spring(二)

Java面试题-Spring(二)

  1. 什么是Spring的内部Bean?

    只有将bean用作另一个bean的属性时,才能将bean声明为内部bean。为了定义bean,Spring的基于xml的配置元数据提供了元素的使用。内部bean总是匿名的,它们总是作为原型。

  2. 什么是Spring装配?

    当bean在Spring容器中组合在一起时,它被称为装配或bean装配。Spring容器需要知道需要什么bean以及容器应该如何使用依赖注入来将bean绑定在一起,同时装配bean。

  3. 自动装配有哪些方式?

    Spring容易能够自动装配bean。可以通过检查BeanFactory的内容让Spring自动解析bean的协作者。

    自动装配的不同模式:

    • no:这是默认配置,表示没有自动装配;
    • byName:它根据bean的名称注入对象依赖项。它匹配并装配其属性与xml文件中由相同名称定义的bean。
    • byType:它根据类型注入对象依赖项。如果属性的类型与xml文件中的一个bean名称匹配,则匹配并装配属性。构造函数:它通过调用类的构造函数来注入依赖项。它有大量的参数。
    • autodetect:首先容器尝试通过构造函数使用autowire装配,如果不能,则尝试通过byTyoe自动装配。
  4. 自动装配有什么局限?

    覆盖的可能性:始终可以使用和设置指定依赖项,这将覆盖自动装配。

    基本元数据类型:简单属性(如原数据类型、字符串和类)无法自动装配。

    令人困惑的性质:总是喜欢使用明确的装配,因为自动装配不太精确。

  5. 什么是基于注解的容器配置

    不使用xml来描述bean装配,开发人员通过在相关的类、方法或字段上声明使用注解将配置移动到组件类本身。它可以作为xml设置的替代方案。

    例如:Spring的Java配置是通过使用@Bean和@Configuration来实现。@Bean注解扮演与元素相同的角色。@Configuration类允许通过简单的调用同一个类中其他@Bean方法来定义bean间依赖关系。

    例如

    @Configuration
    public class StudentConfig{
    	@Bean
    	public StudentBean myStudent(){
    		return new StudentBean();
    	}
    }
    
  6. 如何在Spring中启动注解装配?

    默认情况下,Spring容器未打开注解装配。因此,要使用基于注解装配,我们必须通过配置<context:annotation-config />元素在Spring配置文件中启用它。

  7. @Component,@Controller,@Repository,@Service有何区别?

    • @Component:这将java类标记成bean。它是任何Spring管理组件的通用构造型。Spring组件的扫描机制现在可以将其拾取并将其拉入应用程序环境中。

    • @Controller:这将一个类标记为Spring Web MVC控制器。标有它的Bean会自动导入到IoC容器中。

    • @Service:此注解是组件注解的特化。它不会对@Component注解提供任何其他行为。您可以在服务层中使用@Service而不是@Component,因为它以更好的方式指定了意图。

    • @Repository:这个注解是具有类似用途和功能的@Component注解的特化。它为DAO提供了额外的好处。它将DAO导入IOC容器,并使未经检查的异常有资格转换为SpringDataAccessException。

  8. @Required注解有什么用?

    @Required应用于bean属性的setter方法。此注解仅指示必须在配置时使用bean定义中的显示属性值或使用自动装配填充受影响的bean属性。如果尚未填充受影响的bean属性,则容器将抛出BeanInitialzationException。

  9. @Autowired注解有什么用?

    @Autowired可以更准确地控制应该在何处以及如何进行自动装配。此注解用于在setter方法,构造函数,具有 任意名称或多个参数的属性或方法上自动装配bean。默认情况下,它是类型驱动的注入。

  10. @Qualifier注解有什么用?

    当创建多个相同类型的bean并希望仅使用属性装配其中一个bean时,可以使用@Qualifier注解和@Autowired通过指定应该装配哪个确切的bean来消除歧义。

  11. @RequestMapping注解有什么用?

    @RequestMapping注解用户将特定Http请求方法映射到将处理相应请求的控制器中的特定类/方法。此注释可应用于两个级别:

    • 类级别:映射请求的URL
    • 方法级别:映射URL以及HTTP请求方法
  12. SpringDAO有什么用?

    SpringDAO使得JDBC,Hibernate或JDO这样的数据访问技术更容易以一种统一的方式工作。这使得用户容易在持久性技术之间切换。它还允许在编写代码时,无需考虑捕获每种技术不同的异常。

  13. Spring JDBC API中存在哪些类?

    • JbdcTemplate
    • SimpleJdbcTemplate
    • NameParameterJdbcTemplate
    • SimpleJdbcInsert
    • SimpleJdbcCall
  14. 使用Spring访问Hibernate的方法有哪些?

    • 使用Hibernate模板和回调进行控制反转;
    • 扩展HibernateDAOSupport并应用AOP拦截器节点。
  15. 列举Spring支持的事务管理类型

    Spring支持两种类型的事务管理:

    • 程序化事务管理:在此过程中,在编程的帮助下管理事务。它具有极大的灵活性,但维护困难。
    • 声明式事务管理:在此,事务管理与业务代码分离。仅使用注解或基于xml的配置来管理事务。
  16. Spring支持哪些ORM框架?

    • Hibernate
    • Mybatis
    • JPA
    • JDO
    • OJB
  17. 什么是AOP?

    AOP就是面向切面编程,它与OOP面向对象编程相辅相成,提供了与OOP不同观点抽象软件结构的视角。在OOP中,我们以类Class作为我们的基本单元,而AOP中的基本单元是Aspect切面。

  18. 什么是Aspect?

    Aspect由pointcount和advice组成。它既包含了横切逻辑的定义,也包括了连接点的定义。SpringAOP就是负责实施切面的框架,它将切面所定义的横切逻辑编织到切面所指定的连接点中。AOP的工作重心在于如何将增强编织目标对象的连接点上,这里包含两个工作:

    • 如何通过pointcut和advice定位到特定的joinpoint上;
    • 如何在advice中编写切面代码。
  19. 什么是切点(JoinPoint)?

    切点是程序运行中的一些时间点,例如一个方法的执行,或是一个异常的处理。在SpringAOP中,JoinPoint总是方法的执行点。

  20. 什么是通知(Advice)?

    特定JoinPoint处的Aspect所采取的动作称为Advice。SpringAOP使用一个Advice作为拦截器,在JoinPoint的周围维护一系列的拦截器。

  21. 有哪些类型的通知(Advice)?

    • Before:这些类型的Advice在JoinPoint方法之前执行,并使用@Before注解标记进行配置。
    • After Returning:这些类型的Advice在连接点方法正常执行后执行,并使用@AfterReturning注解标记进行配置。
    • After Throwing:这些类型的Advice仅在JoinPoint方法通过抛出异常退出并使用@AfterThrowing注解标记配置时执行。
    • After(finally):这些类型的Advice在连接点方法之后执行,无论方法退出是正常还是异常返回,并使用@After注解标记进行配置。
    • Around:这些类型的Advice在连接点之前和之后执行,并使用@Around注解标记进行配置。
  22. 指出在Spring aop中Concern和cross-cuttingconcern的不同之处。

    concern是我们想要在应用程序的特定模块中定义的行为,它可以定义为我们想要实现的功能。

    cross-cutting concern是一个适用于整个应用的行为,这会影响整个应用程序。例如日志记录、安全性和数据传输是应用程序几乎每个模块都需要关注的问题,因此它们是跨领域的问题。

  23. AOP有哪些实现方式?

    实现AOP 的技术主要分两大类:

    • 静态代理:指使用AOP框架提供的命令进行编译,从而在编译阶段就可生产AOP代理类,因此也称为编译时增强
      • 编译时编织(特殊编译器实现)
      • 类加载时编织(特殊的类加载器实现)
    • 动态代理:在运行时在内存中“临时”生成AOP动态代理类,因此也被称为运行时增强。
      • JDK动态代理
      • CGLIB
  24. Spring AOP和AspectJ AOP有什么区别?

    Spring AOP基于动态代理的方式实现,AspectJ基于静态代理方式实现。

    Spring AOP仅支持方法级别的PointCut;AspectJ提供了完全的AOP支持,它还支持属性级别的PointCut。

  25. 如何理解Spring中的代理?

    将Advice应用于目标对象 后创建的对象称为代理,在客户端对象的情况下,目标对象和代理对象是相同的。

  26. 什么是编织(Weaving)?

    为了创建一个Advice对象而链接一个Aspect和其它应用类型或对象,称为编织(Weaving)。在Spring AOP中,编织在运行时执行。

  27. Spring MVC框架有什么用?

    Spring MVC框架提供模型-视图-控制器架构和随时可用的组件,用于开发灵活且松散耦合的Web应用程序。MVC模式有助于分离应用程序的不同方面,如输入逻辑,业务逻辑 和UI逻辑,同时在所有这些元素之间提供松散耦合。

  28. 描述一下DispatcherServlet的工作流程

    1. 向服务器发送Http请求,请求被前端控制器DispatcherServlet捕获。
    2. DispatcherServlet根据server.xml中的配置对请求的url进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回。
    3. DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter。(如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)。
    4. 提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。在填充Handler的入参过程中,根据自身的配置,Spring将帮助做一些额外的工作:
      • HttpMessageConveter:将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的相应信息。
      • 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等。
      • 数据格式化:对请求消息进行数据格式化。如将字符串转换成格式化数字或格式化日期等。
      • 数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中。
    5. Handler(Controller)执行完成后,向DispatcherServlet返回一个ModelAndView对象;
    6. 根据返回的ModelAndView,选择一个合适的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet。
    7. ViewResolver结合Model和View来渲染视图。
    8. 视图复制将渲染结果返回客户端。
  29. 什么是WebApplicationContext?

    WebApplicationContext是ApplicationContext的扩展,它具有Web应用程序所需的一些额外功能。它与普通的ApplicationContext在解析主题和决定与哪个Servlet关联的能力方面有所不同。

  30. 什么是Spring?

    Spring是Java企业级应用的开源开发框架。Spring只要用于开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。Spring框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯。

  31. 使用Spring框架的好处是什么?

    • 轻量:Spring是轻量的,基本版本大约2MB;
    • 控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
    • 面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
    • 容器:Spring包含并管理应用中对象的声明周期和配置。
    • MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
    • 事务管理:Spring提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
    • 异常处理:Spring提供方便的API把具体技术相关的异常转化为一致的unchecked异常。
  32. Spring由哪些模块组成?

    • Core
    • Bean
    • Context
    • Expression Language
    • JDBC
    • ORM
    • OXM
    • Java Messaging Servi(JMS)
    • Transaction
    • Web
    • Web-Servlet
    • Web-Struts
    • Web-Portlet
posted @ 2021-05-06 00:23  1LDK  阅读(61)  评论(0编辑  收藏  举报