做电子章网站,wordpress关键词,电商网站里的图片,wordpress顶部导航菜单目录 Java全技术栈面试题合集地址Spring篇1.什么是“依赖注入”和“控制反转”#xff1f;2.构造器注入和 setter 依赖注入#xff0c;那种方式更好#xff1f;3.什么是 Spring Framework#xff1f;4.Spring Framework 有哪些不同的功能#xff1f;5.Spring Framework 中… 目录 Java全技术栈面试题合集地址Spring篇1.什么是“依赖注入”和“控制反转”2.构造器注入和 setter 依赖注入那种方式更好3.什么是 Spring Framework4.Spring Framework 有哪些不同的功能5.Spring Framework 中有多少个模块它们分别是什么6.什么是 Spring 配置文件7.Spring 应用程序有哪些不同组件8.使用 Spring 有哪些方式9.什么是 Spring IOC 容器10.spring 中有多少种 IOC 容器11.IoC 的一些好处。12.Spring IoC 的实现机制。13.什么是 spring bean14.spring 提供了哪些配置方式15.Spring 支持集中 bean scope16.Spring bean 容器的生命周期是什么样的17.什么是 spring 的内部 bean18.什么是 spring 装配19.自动装配有哪些方式20.自动装配有什么局限21.Component, Controller, Repository,Service 有何区别22.Required 注解有什么用23.Autowired 注解有什么用24.Qualifier 注解有什么用25.、RequestMapping 注解有什么用26.Spring DAO 有什么用27.Spring JDBC API 中存在哪些类28.使用 Spring 访问 Hibernate 的方法有哪些29.Spring 支持的事务管理类型30.Spring 支持哪些 ORM 框架31.什么是 AOP32.什么是 Aspect33.有哪些类型的通知Advice34.AOP 有哪些实现方式35.Spring AOP and AspectJ AOP 有什么区别36.使用 Spring 框架的好处是什么37.Spring 框架中的单例 bean 是线程安全的吗?38.哪些是重要的 bean 生命周期方法你能重载它们吗 Java全技术栈面试题合集地址
Java全技术栈面试题合集地址跳转
Spring篇
1.什么是“依赖注入”和“控制反转”
被调用者的实例不再由调用者创建而是由 Spring 容器创建这称为控制反转。Spring 容器在创建被调用者的实例时会自动将调用者需要的对象实例注入给调用者这样调用者通过 Spring容器获得被调用者实例这称为依赖注入。 1属性 setter 注入 2构造方法注入 2Field注入
2.构造器注入和 setter 依赖注入那种方式更好
每种方式都有它的缺点和优点。构造器注入保证所有的注入都被初始化但是setter 注入提供更好的灵活性来设置可选依赖。如果使用 XML 来描述依赖Setter 注入的可读写会更强。经验法则是强制依赖使用构造器注入可选依赖使用 setter 注入。 Field注入优点在成员变量上写上注解来注入这种方式精短可读性高不需要多余的代码也方便维护缺点这样不符合JavaBean的规范而且很有可能引起空指针同时也不能将对象标为final的类与DI容器高度耦合我们不能在外部使用它类不通过反射不能被实例化
3.什么是 Spring Framework
Spring 是一个开源应用框架旨在降低应用程序开发的复杂度。它是轻量级、松散耦合的。它具有分层体系结构允许用户选择组件同时还为 J2EE 应用程序开发提供了一个有凝聚力的框架。它可以集成其他框架如 Structs、Hibernate、EJB 等所以又称为框架的框架
4.Spring Framework 有哪些不同的功能
轻量级 - Spring 在代码量和透明度方面都很轻便。IOC - 控制反转AOP - 面向切面编程可以将应用业务逻辑和系统服务分离以实现高内聚。容器 - Spring 负责创建和管理对象Bean的生命周期和配置。MVC - 对 web 应用提供了高度可配置性其他框架的集成也十分方便。事务管理 - 提供了用于事务管理的通用抽象层。Spring 的事务支持也可用于容器较少的环境。JDBC 异常 - Spring的 JDBC 抽象层提供了一个异常层次结构简化了错误处理策略。
5.Spring Framework 中有多少个模块它们分别是什么
Spring 核心容器 – 该层基本上是 Spring Framework 的核心。它包含以下模块
Spring CoreSpring BeanSpEL (Spring Expression Language)Spring Context 数据访问-集成 该层提供与数据库交互的支持。它包含以下模块JDBC (Java DataBase Connectivity)ORM (Object Relational Mapping)OXM (Object XML Mappers)JMS (Java Messaging Service)Transaction Web – 该层提供了创建 Web 应用程序的支持。它包含以下模块WebWeb – ServletWeb – SocketWeb – Portlet AOP 该层支持面向切面编程 Instrumentation 该层为类检测和类加载器实现提供支持。 Test 该层为使用 JUnit 和 TestNG 进行测试提供支持。 Messaging – 该模块为 STOMP 提供支持。它还支持注解编程模型该模型用于从 WebSocket 客户端路由和处理 STOMP 消息。 Aspects – 该模块为与 AspectJ 的集成提供支持。
6.什么是 Spring 配置文件
Spring 配置文件是 XML 文件。该文件主要包含类信息。它描述了这些类是如何配置以及相互引入的。但是XML 配置文件冗长。如果没有正确规划和编写那么在大项目中管理变得非常困难。
7.Spring 应用程序有哪些不同组件
接口 - 定义功能。Bean 类 - 它包含属性setter 和 getter 方法函数等。Spring 面向切面编程AOP - 提供面向切面编程的功能。Bean 配置文件 - 包含类的信息以及如何配置它们。用户程序 - 它使用接口。
8.使用 Spring 有哪些方式
作为一个成熟的 Spring Web 应用程序作为第三方 Web 框架使用 Spring Frameworks 中间层。用于远程使用。作为企业级 Java Bean它可以包装现有的 POJOPlain Old Java Objects。
9.什么是 Spring IOC 容器
Spring 框架的核心是 Spring 容器。容器创建对象将它们装配在一起配置它们并管理它们的完整生命周期。Spring 容器使用依赖注入来管理组成应用程序的组件。容器通过读取提供的配置元数据来接收对象进行实例化配置和组装的指令。该元数据可以通过 XMLJava 注解或 Java 代码提供。
10.spring 中有多少种 IOC 容器
BeanFactory - BeanFactory 就像一个包含 bean 集合的工厂类。它会在客户端要求时实例化 bean。 ApplicationContext - ApplicationContext 接口扩展了 BeanFactory 接口。它在 BeanFactory 基础上提供了一些额外的功能。
BeanFactoryApplicationContext懒加载即时加载使用语法显式提供资源对象自己创建和管理资源对象不支持国际化支持国际化不支持基于依赖的注解支持基于依赖的注解
11.IoC 的一些好处。
它将最小化应用程序中的代码量。它将使您的应用程序易于测试因为它不需要单元测试用例中的任何单例或 JNDI 查找机制。它以最小的影响和最少的侵入机制促进松耦合。它支持即时的实例化和延迟加载服务。
12.Spring IoC 的实现机制。
Spring 中的 IoC 的实现原理就是工厂模式加反射机制。
13.什么是 spring bean
它们是构成用户应用程序主干的对象。它们由 Spring IoC 容器实例化配置装配和管理。Bean 是基于用户提供给容器的配置元数据创建。
14.spring 提供了哪些配置方式
基于 xml 配置 基于注解配置 默认情况下Spring 容器中未打开注解装配。因此您需要在使用它之前在 Spring 配置文件中启用它。
beans
context:annotation-config/
!-- bean definitions go here --
/beans基于 Java API 配置
Bean 注解扮演与 元素相同的角色Configuration 类允许通过简单地调用同一个类中的其他 Bean 方法来定义 bean 间依赖关系
15.Spring 支持集中 bean scope
Singleton - 每个 Spring IoC 容器仅有一个单实例。Prototype - 每次请求都会产生一个新的实例。Request - 每一次 HTTP 请求都会产生一个新的实例并且该 bean 仅在当前 HTTP 请求内有效。Session - 每一次 HTTP 请求都会产生一个新的 bean同时该 bean 仅在当前 HTTP session 内有效。Global-session - 类似于标准的 HTTP Session 作用域不过它仅仅在基于portlet 的 web 应用中才有意义。Portlet 规范定义了全局 Session 的概念它被所有构成某个 portlet web 应用的各种不同的 portlet 所共享。在 globalsession 作用域中定义的 bean 被限定于全局 portlet Session 的生命周期范围内。如果你在 web 中使用 global session 作用域来标识 bean那么 web会自动当成 session 类型来使用。 仅当用户使用支持 Web 的 ApplicationContext 时最后三个才可用。
16.Spring bean 容器的生命周期是什么样的
Spring 容器根据配置中的 bean 定义中实例化 bean。Spring 使用依赖注入填充所有属性如 bean 中所定义的配置。如果 bean 实现BeanNameAware 接口则工厂通过传递 bean 的 ID 来调用setBeanName()。如果 bean 实现 BeanFactoryAware 接口工厂通过传递自身的实例来调用 setBeanFactory()。如果存在与 bean 关联的任何BeanPostProcessors则调用 preProcessBeforeInitialization() 方法。如果为 bean 指定了 init 方法 的 init-method 属性那么将调用它。最后如果存在与 bean 关联的任何 BeanPostProcessors则将调postProcessAfterInitialization() 方法。如果 bean 实现DisposableBean 接口当 spring 容器关闭时会调用 destory()。如果为bean 指定了 destroy 方法 的 destroy-method 属性那么将调用它。
17.什么是 spring 的内部 bean
只有将 bean 用作另一个 bean 的属性时才能将 bean 声明为内部 bean。为了定义 beanSpring 的基于 XML 的配置元数据在 或 中提供了 元素的使用。内部 bean 总是匿名的它们总是作为原型。
18.什么是 spring 装配
当 bean 在 Spring 容器中组合在一起时它被称为装配或 bean 装配。Spring容器需要知道需要什么 bean 以及容器应该如何使用依赖注入来将 bean 绑定在一起同时装配 bean。
19.自动装配有哪些方式
no - 这是默认设置表示没有自动装配。应使用显式 bean 引用进行装配。byName - 它根据 bean 的名称注入对象依赖项。它匹配并装配其属性与 XML文件中由相同名称定义的 bean。byType - 它根据类型注入对象依赖项。如果属性的类型与 XML 文件中的一个 bean 名称匹配则匹配并装配属性。构造函数 - 它通过调用类的构造函数来注入依赖项。它有大量的参数。autodetect - 首先容器尝试通过构造函数使用 autowire 装配如果不能则尝试通过 byType 自动装配。
20.自动装配有什么局限
覆盖的可能性 - 您始终可以使用 和 设置指定依赖项这将覆盖自动装配。基本元数据类型 - 简单属性如原数据类型字符串和类无法自动装配。令人困惑的性质 - 总是喜欢使用明确的装配因为自动装配不太精确。
21.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。
22.Required 注解有什么用
Required 应用于 bean 属性 setter 方法。此注解仅指示必须在配置时使用bean 定义中的显式属性值或使用自动装配填充受影响的 bean 属性。如果尚未填充受影响的 bean 属性则容器将抛出 BeanInitializationException。
23.Autowired 注解有什么用
Autowired 可以更准确地控制应该在何处以及如何进行自动装配。此注解用于在 setter 方法构造函数具有任意名称或多个参数的属性或方法上自动装配bean。默认情况下它是类型驱动的注入。
24.Qualifier 注解有什么用
当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时您可以使用Qualifier 注解和 Autowired 通过指定应该装配哪个确切的 bean来消除歧义。
25.、RequestMapping 注解有什么用
RequestMapping 注解用于将特定 HTTP 请求方法映射到将处理相应请求的控制器中的特定类/方法。此注释可应用于两个级别
类级别映射请求的 URL方法级别映射 URL 以及 HTTP 请求方法
26.Spring DAO 有什么用
Spring DAO 使得 JDBCHibernate 或 JDO 这样的数据访问技术更容易以一种统一的方式工作。这使得用户容易在持久性技术之间切换。它还允许您在编写代码时无需考虑捕获每种技术不同的异常。
27.Spring JDBC API 中存在哪些类
JdbcTemplateSimpleJdbcTemplateNamedParameterJdbcTemplateSimpleJdbcInsertSimpleJdbcCall
28.使用 Spring 访问 Hibernate 的方法有哪些
使用 Hibernate 模板和回调进行控制反转扩展 HibernateDAOSupport 并应用 AOP 拦截器节点
29.Spring 支持的事务管理类型
程序化事务管理在此过程中在编程的帮助下管理事务。它为您提供极大的灵活性但维护起来非常困难。声明式事务管理在此事务管理与业务代码分离。仅使用注解或基于 XML的配置来管理事务。
30.Spring 支持哪些 ORM 框架
Hibernate(JPA规范实现框架)iBatisJPAJDOOJB
31.什么是 AOP
AOP(Aspect-Oriented Programming), 即 面向切面编程, 它与OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与OOP 不同的抽象软件结构的视角. 在 OOP 中, 我们以类(class)作为我们的基本单元, 而 AOP 中的基本单元是 Aspect(切面)。
32.什么是 Aspect
Aspect 由 pointcount程序运行中的一些时间点, 例如一个方法的执行, 或者是一个异常的处理.join point 总是方法的执行点 和 advice特定 JoinPoint 处的 Aspect 所采取的动作称为 Advice 组成, 它既包含了横切逻辑的定义, 也包括了连接点的定义. Spring AOP 就是负责实施切面的框架, 它将切面所定义的横切逻辑编织到切面所指定的连接点中. AOP 的工作重心在于如何将增强编织目标对象的连接点上, 这里包含两个工作: 1、如何通过 pointcut 和 advice 定位到特定的 joinpoint 上 2、如何在advice 中编写切面代码
33.有哪些类型的通知Advice
Before - 这些类型的 Advice 在 joinpoint 方法之前执行并使用Before 注解标记进行配置。After Returning - 这些类型的 Advice 在连接点方法正常执行后执行并使用AfterReturning 注解标记进行配置。After Throwing - 这些类型的 Advice 仅在 joinpoint 方法通过抛出异常退出并使用AfterThrowing 注解标记配置时执行。After (finally) - 这些类型的 Advice 在连接点方法之后执行无论方法退出是正常还是异常返回并使用 After 注解标记进行配置。Around - 这些类型的 Advice 在连接点之前和之后执行并使用Around 注解标记进行配置。
34.AOP 有哪些实现方式
静态代理指使用 AOP 框架提供的命令进行编译从而在编译阶段就可生成 AOP 代理类因此也称为编译时增强
编译时编织特殊编译器实现类加载时编织特殊的类加载器实现
动态代理在运行时在内存中“临时”生成 AOP 动态代理类因此也被称为运行时增强
JDK 动态代理
Java基于接口的动态代理需要实现两个接口InvocationHandler和Proxy。InvocationHandler接口中定义了一个invoke方法该方法接收一个代理对象、被代理对象的方法和参数并返回代理对象对被代理对象的方法进行增强后的返回值。Proxy类中则提供了一个静态方法newProxyInstance用于创建代理对象。
使用Java基于接口的动态代理需要按照以下步骤
定义一个接口该接口中定义需要被代理的方法。实现InvocationHandler接口重写invoke方法对需要被代理的方法进行增强处理。使用Proxy类的newProxyInstance方法创建代理对象。
CGLIB
Java CGLIB 动态代理是一种在运行时生成代理对象的技术它可以在不修改原始类型类的基础上为该类型创建一个代理子类该代理子类可以拦截原始类中的方法调用。相较于Java JDK动态代理它可以代理没有实现接口的类。
CGLIB 是 Code Generation Library代码生成库的简称是一个强大的高性能的代码生成库CGLIB 可以在运行期间扩展 Java 类和实现 Java 接口。它提供了很多实用的功能例如方法拦截、字段拦截、方法调用前后拦截等等。
35.Spring AOP and AspectJ AOP 有什么区别
Spring AOP 基于动态代理方式实现AspectJ 基于静态代理方式实现。Spring Aop采用的动态织入而Aspectj是静态织入。静态织入指在编译时期就织入即编译出来的class文件字节码就已经被织入了。动态织入又分静动两种静则指织入过程只在第一次调用时执行动则指根据代码动态运行的中间状态来决定如何操作每次调用Target的时候都执行。从使用对象不同Spring AOP的通知是基于该对象是SpringBean对象才可以而AspectJ可以在任何Java对象上用。
36.使用 Spring 框架的好处是什么
轻量Spring 是轻量的基本的版本大约 2MB。控制反转Spring 通过控制反转实现了松散耦合对象们给出它们的依赖而不是创建或查找依赖的对象们。面向切面的编程(AOP)Spring 支持面向切面的编程并且把应用业务逻辑和系统服务分开。容器Spring 包含并管理应用中对象的生命周期和配置。MVC 框架Spring 的 WEB 框架是个精心设计的框架是 Web 框架的一个很好的替代品。事务管理Spring 提供一个持续的事务管理接口可以扩展到上至本地事务下至全局事务JTA。异常处理Spring 提供方便的API把具体技术相关的异常比如由JDBCHibernate or JDO 抛出的转化为一致的 unchecked 异常。
37.Spring 框架中的单例 bean 是线程安全的吗?
不Spring 框架中的单例 bean 不是线程安全的。没有做多线程的封装和处理如果有共享变量就会出现线程安全问题。
38.哪些是重要的 bean 生命周期方法你能重载它们吗
有两个重要的 bean 生命周期方法第一个是 setup 它是在容器加载 bean的时候被调用。第二个方法是 teardown 它是在容器卸载类的时候被调用。 The bean 标签有两个重要的属性init-method 和 destroy-method。用它们你可以自己定制初始化和注销方法。它们也有相应的注解PostConstruct 和PreDestroy。
PostConstruct注解时会影响服务启动时间服务启动时会扫描WEB-INF/classes的所有文件和WEB-INF/lib下的所有jar包PostConstruct注解在整个Bean初始化中执行的顺序Constructor构造方法-Autowired依赖注入- PostConstruct注解的方法PostConstruct 可以在Servlet初始化之前加载一些缓存数据如预热数据字典读取properties配置文件