春季面试问题与答案

我最近发布了大量的 [春季教程]( / 社区 / 教程 / 春季教程 - 春季核心教程) 本文将帮助您通过春季采访问题详细解释核心概念。

Spring Framework是Web应用最受欢迎的Java EE框架之一。 Dependency Injection和面向编程是 Spring 框架的核心。

Pro Tip: [核心Java]( / 社区 / 教程 / 核心Java - 教程)是任何基于Java的框架的基础,所以如果您正在为面试做准备,请浏览 [核心Java 面试问题]( / 社区 / 教程 / 核心Java - 面试 - 问题 - 答案)和 [Java 面试问题]( / 社区 / 教程 / java - 面试 - 问题)文章。

春季面试问题与答案

在这里,我提供近50个春季面试问题及其答案,直到春季5日更新,因此它涵盖了所有最新的功能,如(社区 / 教程 / 春季 - Webflux - 反应式 - 编程)。

1、什么是春季框架?

Spring是最常用的Java EE框架之一,其核心概念是依赖注入面向编程

Spring 框架可以在正常的 Java 应用程序中使用,通过实现依赖注入来实现不同组件之间的松散连接。

我喜欢春天,因为它提供了许多功能和不同的模块,用于特定任务,如春天MVC和春天JDBC。

推荐阅读: [春季框架]( / 社区 / 教程 / 春季框架)

2、春季框架的一些重要特征是什么?

Spring Framework 基于两个设计概念:依赖注入和面向编程。

春季框架的一些特点是:

  • 使用框架的重量很小,而且很少使用我们的开发
  • 依赖注入或控制逆转来编写相互独立的组件,春 container 负责将它们连接在一起以实现我们的工作
  • 春 IoC 容器管理春豆生命周期和项目特定的配置,如JNDI搜索
  • 春豆 MVC 框架可以用来创建Web应用程序以及能够返回XML以及JSON响应的安静的Web服务

支持交易管理,JDBC操作,文件上传,例外处理等非常少的配置,通过使用注释或春豆配置文件

3、使用春季框架有什么好处?

使用 Spring Framework 的一些优点是:

  • 减少应用程序不同组成部分之间的直接依赖。 春季IoC容器负责初始化资源或豆类并将其作为依赖物注入. (_ ( )* 写作单位的测试案例在"春天"框架中是容易的,因为我们的业务逻辑没有直接依赖实际的资源执行类别. 我们可以轻松地写出测试配置,并注入模拟豆作测试之用. (_ ( )* 减少锅炉-平板电码的数量,如初始化物体,开放/关闭资源等. 我非常喜欢JdbcTemplate类,因为它帮助我们去除所有与JDBC编程相伴而来锅炉-平板码. (_ ( )* 春季框架分为几个模块,帮助我们保持应用程序的轻量级. 例如,如果我们不需要Spring交易管理功能,我们不需要在项目中添加这种依赖性。 (_ ( )* 春季框架支持了Java EE的大部分特征,甚至更多. 它总是在新技术之上, 例如Android的Spring项目帮助我们为Android的本地应用写出更好的代码。 我们不需要为不同的要求照顾不同的框架。 (单位:千美元) (英语)

四、春节五大特点有哪些?

春天5是从春天4开始的一次重大改造,其中一些重要特征是:

  • 支持 Java 8 和更高版本,所以我们可以使用 lambda 表达式
  • 支持 Java EE7 和 Servlet 4.0 规格
  • 现在通过 NIO 2 流进行文件操作,如果您的应用程序处理了很多文件,这是一个巨大的改进
  • 引入 Spring-jcl 来简化日志记录,以前它是一个混乱,因为没有一个单点用于日志记录
  • 支持 Kotlin, Lombok, Reactor 3.1 Flux,Mono 以及 RxJava
  • Spring WebFlux 将反应式编程带到 Spring
  • 支持 JUnit 5

請瀏覽 [春天 5 功能]( / 社區 / 教程 / 春天-5)以獲得這個版本的詳細概述。

什么是 Spring WebFlux?

春季WebFlux是春季5年推出的新模块,是春季框架中的反应式编程模型的第一步。

Spring WebFlux 是 Spring MVC 模块的替代品. Spring WebFlux 用于创建基于事件循环执行模型的完全无同步和非阻断的应用程序。

您可以阅读更多关于它在 [Spring WebFlux 教程]( / 社区 / 教程 / 春季 Webflux - 反应式 - 编程)。

6、依赖性注射是什么意思?

依赖注射设计模式允许我们删除硬代码的依赖性,使我们的应用程序松散地连接,可扩展和可维护。

使用依赖注射的一些好处包括关切的分离,锅炉板代码减少,可配置的组件和简单的单元测试。

阅读更多在 依赖注射教程我们也可以使用 Google Guice for Dependency Injection来自动化依赖注射的过程。

7、我们如何在春季框架中实施DI?

我们可以使用基于XML的春季以及基于注释的配置来实现DI在春季应用程序中。 为了更好地理解,请阅读 [春季依赖注射]( / 社区 / 教程 / 春季依赖注射)示例,您可以学习 JUnit 测试案例的两种方式。

使用 Spring Tool Suite 有哪些好处?

我们可以将插件安装到Eclipse中,以获得Spring Tool Suite的所有功能,然而,STS还配备了Eclipse和一些其他重要类型的东西,如Maven支持,创建不同类型的Spring项目的模板和TC服务器,以便在Spring应用程序中表现更好。

我喜欢STS,因为它强调了Spring组件,如果您使用AOP点击和建议,那么它清楚地表明哪些方法将受到特定点击。

9. 提一下一些重要的春季模块?

一些重要的春季框架模块是:

  • 春季背景 - 用于依赖注入
  • 春季AOP - 用于面向编程
  • 春季DAO - 用于使用DAO模式的数据库操作
  • 春季JDBC - 用于JDBC和DataSource支持
  • 春季ORM - 用于Hibernate
  • 春季Web模块 - 用于创建Web应用程序
  • 春季MVC - 模型视图控制器实现用于创建Web应用程序,Web服务等

问:你对面式编程的理解是什么?

企业应用程序有一些共同的跨界问题,适用于不同类型的对象和应用模块,如日志,交易管理,数据验证,身份验证等。

例如,我们可以有一个单独的类来记录,但其他类将不得不调用这些方法。但是,在 AOP 中,我们会自动配置各个方面,并自动执行方法。 阅读更多关于 Spring AOP 支持的信息在 Spring AOP Example

什么是 Aspect, Advice, Pointcut, JointPoint 和 Advice 论点在 AOP 中?

Aspect:Aspect是一个实现交叉关切的类,例如交易管理。Aspect可以是一个正常的类配置,然后在Spring Bean配置文件中配置,或者我们可以使用Spring AspectJ支持来使用@Aspect注释来声明一个类为Aspect。

Advice:Advice是针对特定连接点所采取的行动,在编程方面,它们是在应用程序中达到与匹配点相匹配的特定连接点时执行的方法,您可以将Advice视为 Spring interceptorsServlet Filters

Pointcut:Pointcuts是与连接点匹配的常规表达式,以确定是否需要执行建议。Pointcut使用与连接点匹配的不同类型的表达式。

JoinPoint:一个连接点是应用程序中的特定点,如方法执行、例外处理、对象变量值的改变等。

Advice Arguments:我们可以通过建议方法中的参数。我们可以在点击中使用args()表达式来应用于与参数模式相匹配的任何方法。

这些概念在一开始看起来很困惑,但如果你通过( / 社区 / 教程 / 春天 - 例子 - 教程 - 外观 - 建议 - 点 - 合点 - 注释)然后你可以很容易地与他们相关。

春季AOP和AspectJAOP的区别是什么?

AspectJ 是面向面向编程的行业标准实现,而 Spring 则在某些情况下实现 AOP。

  • Spring AOP 比 AspectJ 更容易使用,因为我们不需要担心织物过程
  • Spring AOP 支持 AspectJ 注释,所以如果你熟悉 AspectJ,那么使用 Spring AOP 就更容易了
  • Spring AOP 只支持基于代理的 AOP,所以它只能应用于方法执行的合并点。

什么是 Spring IoC 集装箱?

Inversion of Control(IoC)是实现对象依赖之间的松散连接的机制。为了在运行时实现对象的松散连接和动态连接,对象定义了其由其他组装对象注入的依赖。

Spring Framework IoC 容器类是org.springframework.beansorg.springframework.context包的一部分,为我们提供不同的方式来分离对象依赖。

我们使用的一些有用的 ApplicationContext 实现是;

  • AnnotationConfigApplicationContext: 用于使用注释式配置的单独的 Java 应用程序
  • ClassPathXmlApplicationContext: 用于使用基于 XML 的单独的 Java 应用程序
  • FileSystemXmlApplicationContext: 类似于 ClassPathXmlApplicationContext,但 XML 配置文件可以从文件系统中的任何地方加载
  • Web 应用程序的 AnnotationConfigWebApplicationContext 和 XmlWebApplicationContext

14、什么是春豆?

任何由Spring IoC容器初始化的正常Java类称为Spring Bean,我们使用SpringApplicationContext来获得Spring Bean实例。

Spring IoC 容器管理 Spring Bean 的生命周期,豆子范围,并将任何必要的依赖物注入豆子中。

15. Spring bean 配置文件的重要性是什么?

我们使用 Spring Bean 配置文件来定义将由 Spring Context 初始化的所有豆类. 当我们创建 Spring ApplicationContext 实例时,它会读取 Spring Bean XML 文件并初始化它们。

除了 Spring Bean 配置外,此文件还包含 Spring MVC 拦截器、视图解析器和其他元素,以支持基于注释的配置。

16. 如何配置一个类为 Spring Bean 的不同方法?

有三种不同的方式来配置 Spring Bean。

XML 配置:这是最流行的配置,我们可以在文本文件中使用 bean 元素来配置 Spring Bean。

1<bean name="myBean" class="com.journaldev.spring.beans.MyBean"></bean>

Java Based Configuration:如果您只使用注释,您可以使用@Bean注释来配置春豆,此注释用于@Configuration类来配置春豆。

1@Configuration
2@ComponentScan(value="com.journaldev.spring.main")
3public class MyConfiguration {
4
5    @Bean
6    public MyService getService(){
7    	return new MyService();
8    }
9}

要从春天背景中获取这个豆子,我们必须使用以下代码片段:

1AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(
2    	MyConfiguration.class);
3MyService service = ctx.getBean(MyService.class);

** 基于注释的配置**:我们还可以使用 @Component、 @Service、 @Repository 和 @Controller 与类的注释来配置它们为春豆。

1<context:component-scan base-package="com.journaldev.spring" />

17、春豆的不同范围是什么?

有五个领域定义为春豆。

  1. singleton:将为每个容器创建一个单个实例。这是春豆的默认范围。使用这个范围时,请确保春豆没有共享实例变量,否则可能会导致数据不一致问题,因为它不安全 2.原型:每次需要春豆时都会创建一个新实例 3.请求:这是与原型范围相同的,但它是用于Web应用程序的。

Spring Framework 是可扩展的,我们也可以创建自己的范围,但大多数时候我们都很擅长框架提供的范围。 为了设置 Spring bean 范围,我们可以使用 bean 元素中的范围属性或 @Scope 注释用于注释式配置。

18、春豆的生命周期是什么?

春豆是由春 container初始化的,所有的依赖性也被注入。当背景被破坏时,它也破坏了所有初始化的豆类。这在大多数情况下很好,但有时我们想要初始化其他资源或在使我们的豆类准备好使用之前进行验证。春豆框架为春豆的初始化后和预破坏方法提供了支持。

我们可以以两种方式做到这一点:通过实施InitializingBeanDisposableBean界面,或者在春豆配置中使用 init-methoddestroy-method属性。

19. 如何在 Spring Bean 中获取 ServletContext 和 ServletConfig 对象?

有两种方法可以在春豆中获取集装箱特定的物体。

  • 实施 Spring *Aware 接口,对于这些 ServletContextAware 和 ServletConfigAware 接口,对于这些有意识的接口的完整示例,请阅读 Spring Aware 接口
  • 使用 @Autowired 注释与类型的 Bean 变量 ServletContextServletConfig
1@Autowired
2ServletContext servletContext;

20.什么是 Bean 线和 @Autowired 注释?

在初始化时注入春豆依赖的过程被称为春豆线。

通常,最好的做法是对所有豆类依赖的明确连接,但春季框架也支持自动连接. 我们可以使用 @Autowired 注释与 autowiring byType 的字段或方法。

有关@Autowired注释的更多细节,请阅读( / 社区 / 教程 / 春天-autowired-注释)。

21、春豆自动驾驶的不同类型有哪些?

春季框架中有四种类型的自动驾驶。

  1. autowire byName
  2. autowire byType
  3. autowire by constructor
  4. autowiring by @Autowired and @Qualifier annotations

在 Spring 3.1 之前,autowire by autodetect 也支持类似于 autowire by constructor 或 byType. 有关这些选项的更多细节,请阅读 Spring Bean Autowiring

春豆提供线程安全吗?

Spring bean 的默认范围是 singleton,因此每个背景只会有一个实例,这意味着所有具有类级变量的任何线程都可以更新都会导致不一致的数据。

然而,我们可以更改春豆的范围以要求、原型或会话,以便以性能为代价实现线程安全,这是一个设计决定,并基于项目要求。

什么是春季MVC中的控制器?

与 MVC 设计模式一样,控制器是处理所有客户端请求的类,并将其发送到配置的资源来处理它们。

一个控制器类负责基于请求映射处理不同类型的客户端请求。我们可以使用 @Controller 注释创建一个控制器类. 通常,它与 @RequestMapping 注释一起用于定义特定 URI 映射的处理方法。

春季中的 @Component、 @Controller、 @Repository 和 @Service 注释的区别是什么?

@Component 用来表示一个类是组件,这些类用于自动检测,并在使用基于注释的配置时配置为粒子。

@Controller 是特定类型的组件,用于 MVC 应用程序,主要用于 RequestMapping 注释。

@Repository 注释用于表示一个组件被用作存储库和存储/检索/搜索数据的机制。

@Service 用来表示一类是服务. 通常,提供某些服务的业务面板类被注明。

我们可以使用上述任何注释用于自动检测类,但提供不同的类型,以便您可以轻松区分注释类的目的。

什么是 DispatcherServlet 和 ContextLoaderListener?

DispatcherServlet 是 Spring MVC 应用程序中的前置控制器,它加载了春豆配置文件并初始化了配置的所有豆类. 如果启用了注释,它还扫描了包,并配置了任何用 @Component、 @Controller、 @Repository 或 @Service 注释的豆类。

ContextLoaderListener 是启动和关闭 Spring 根 WebApplicationContext 的倾听器,其重要功能是将 ApplicationContext 的生命周期与 ServletContext 的生命周期联系起来,并自动创建 ApplicationContext。

四、春天有哪些景点?

使用 ViewResolver 实现程序以名称解决视图页面,我们将其配置为春豆配置文件,例如:

1<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
2<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
3    <beans:property name="prefix" value="/WEB-INF/views/" />
4    <beans:property name="suffix" value=".jsp" />
5</beans:bean>

InternalResourceViewResolver 是 ViewResolver 接口的实现之一,我们通过 Bean 属性提供视图页面目录和补丁位置,因此,如果控制器处理方法返回,视图解决程序将使用位于 /WEB-INF/views/home.jsp 的视图页面。

27、什么是MultipartResolver,何时使用?

MultipartResolver 接口用于上传文件 - CommonsMultipartResolver 和 StandardServletMultipartResolver 是由 Spring Framework 提供的两种实现,用于上传文件. 默认情况下,没有配置多部分解析器,但要使用它们上传文件,我们只需要定义一个名为multipartResolver的,在 Spring Bean 配置中以 MultipartResolver 为类型。

一旦配置,任何多部分请求将由配置的 MultipartResolver 解决,并传递一个包装的 HttpServletRequest. 然后在控制器类中使用它来获取文件并处理它. 对于完整的示例,请阅读 Spring MVC File Upload Example

28. 如何处理春季 MVC 框架中的例外?

Spring MVC 框架提供了以下方法,帮助我们实现强大的例外处理。

** 基于控制器** – 我们可以在控制器类中定义例外处理方法,我们只需要用 @ExceptionHandler 注释来注释这些方法。

全球例外处理器 - 例外处理是一个跨界问题,春天提供 @ControllerAdvice 注释,我们可以使用任何类来定义我们的全球例外处理器。

HandlerExceptionResolver实现 – 对于通用例外,我们大部分时间都服务于静态页面。Spring Framework提供了一个HandlerExceptionResolver接口,我们可以实现创建一个全球例外处理器。

对于一个完整的例子,请阅读 Spring Exception Handling Example

如何在Java程序中创建ApplicationContext?

以下是如何在独立的Java程序中创建春季背景的方法。

  1. AnnotationConfigApplicationContext:如果我们在独立的Java应用程序中使用Spring,并使用Annotations for Configuration,那么我们可以使用它来初始化容器并获取豆类对象
  2. ClassPathXmlApplicationContext:如果我们在独立的应用程序中有春豆配置XML文件,那么我们可以使用这个类来加载文件并获取容器对象
  3. FileSystemXmlApplicationContext:这与ClassPathXmlApplicationContext类似,但 XML配置文件可以从文件系统中的任何地方加载

我们可以有多个春季配置文件吗?

对于 Spring MVC 应用程序,我们可以通过 contextConfigLocation 定义多个 Spring 背景配置文件,这个位置字符串可以由任意数量的字符串和空间分开的多个位置组成。

1<servlet>
2    <servlet-name>appServlet</servlet-name>
3    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
4    <init-param>
5            <param-name>contextConfigLocation</param-name>
6        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml,/WEB-INF/spring/appServlet/servlet-jdbc.xml</param-value>
7    </init-param>
8    <load-on-startup>1</load-on-startup>
9</servlet>

我们还可以定义多个根层春季配置,并通过背景参数加载。

1<context-param>
2    <param-name>contextConfigLocation</param-name>
3    <param-value>/WEB-INF/spring/root-context.xml /WEB-INF/spring/root-security.xml</param-value>
4</context-param>

另一种选项是使用环境配置文件中的导入元素导入其他配置,例如:

1<beans:import resource="spring-jdbc.xml"/>

问:什么是 ContextLoaderListener?

ContextLoaderListener是用于加载根背景和定义春豆配置的倾听类,将可见于所有其他背景。

1<context-param>
2    <param-name>contextConfigLocation</param-name>
3    <param-value>/WEB-INF/spring/root-context.xml</param-value>
4</context-param>
5    
6<listener>
7    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
8</listener>

32. 创建 Spring MVC 应用程序所需的最低配置是什么?

要创建一个简单的 Spring MVC 应用程序,我们需要执行以下任务。

  • 在项目中添加春季背景春季webmvc的依赖性 *在web.xml文件中配置DispatcherServlet,以便通过春季容器处理请求 *春季豆配置文件来定义豆类,如果使用注释,则必须在这里配置。

上面的步骤应该足以创建一个简单的 Spring MVC Hello World 应用程序。

33、你将如何将春季MVC框架与MVC架构联系起来?

正如其名稱所示,Spring MVC 是建立在 Model-View-Controller架構之上。 `DispatcherServlet' 是 Spring MVC 應用程式中的前置控制器,它照顧所有傳入的請求,並將其傳授到不同的控制器處理方法。

模型可以是 Spring Framework 中的任何 Java Bean,就像任何其他 MVC 框架一样, Spring 可以自动将表单数据绑定到 java 豆类中,我们可以将模型豆类设置为视图页面中使用的属性。

视图页面可以是 JSP、静态HTML等,视图解析器负责查找正确的视图页面.一旦视图页面被识别,控制将返回DispatcherServlet控制器.DispatcherServlet负责渲染视图并返回最终响应给客户端。

如何在春季MVC应用中实现本地化?

Spring 通过资源包为本地化或 i18n 提供了很好的支持。

  • 创建不同局域的消息资源组合,例如 messages_en.properties、 messages_fr.properties 等
  • 定义在 Spring bean 配置文件中的 messageSource 标本,类型为 ResourceBundleMessageSource 或 ReloadableResourceBundleMessageSource
  • 若要更改本地支持,请定义 CookieLocaleResolver 类型的 localeResolver 标本,并配置 LocaleChangeInterceptor 拦截器。
 1<beans:bean id="messageSource"
 2class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
 3<beans:property name="basename" value="classpath:messages" />
 4<beans:property name="defaultEncoding" value="UTF-8" />
 5</beans:bean>
 6
 7<beans:bean id="localeResolver"
 8    class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
 9    <beans:property name="defaultLocale" value="en" />
10    <beans:property name="cookieName" value="myAppLocaleCookie"></beans:property>
11    <beans:property name="cookieMaxAge" value="3600"></beans:property>
12</beans:bean>
13
14<interceptors>
15    <beans:bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
16        <beans:property name="paramName" value="locale" />
17    </beans:bean>
18</interceptors>
  • 使用具有关键名称的视图页面中的 spring:message 元素,DispatcherServlet 选择相应的值,并将页面渲染为相应的本地,并作为响应返回

对于一个完整的例子,请阅读 [春季定位示例]( / 社区 / 教程 / 春季 - mvc - 国际化 - i18n - 和 - 定位 - l10n - 示例)。

如何使用Spring创建返回JSON响应的Restful Web Service?

我们可以使用 Spring Framework 来创建恢复式 Web 服务,以返回 JSON 数据. Spring 提供了与 Jackson JSON API 的集成,我们可以使用它来在舒适的 Web 服务中发送 JSON 响应。

我们需要执行以下步骤来配置我们的 Spring MVC 应用程序以发送 JSON 响应。

1、添加杰克逊 JSON 依赖,如果你使用 Maven,可以用以下代码完成:

1<!-- Jackson -->
2<dependency>
3    <groupId>com.fasterxml.jackson.core</groupId>
4    <artifactId>jackson-databind</artifactId>
5    <version>${jackson.databind-version}</version>
6</dependency>

2.在春豆配置文件中配置RequestMappingHandlerAdapter豆,并将消息转换器属性设置为MappingJackson2HttpMessageConverter豆。

 1<!-- Configure to plugin JSON as request and response in method handler -->
 2<beans:bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
 3    <beans:property name="messageConverters">
 4        <beans:list>
 5            <beans:ref bean="jsonMessageConverter"/>
 6        </beans:list>
 7    </beans:property>
 8</beans:bean>
 9
10<!-- Configure bean to convert JSON to POJO and vice versa -->
11<beans:bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
12</beans:bean>

在控制器处理方法中,使用@ResponseBody注释返回对象作为回应。

1@RequestMapping(value = EmpRestURIConstants.GET_EMP, method = RequestMethod.GET)
2public @ResponseBody Employee getEmployee(@PathVariable("id") int empId) {
3    logger.info("Start getEmployee. ID="+empId);
4
5    return empData.get(empId);
6}

您可以通过任何 API 调用休息服务,但如果您想使用 Spring,则可以轻松使用 RestTemplate 类。

对于一个完整的例子,请阅读 [Spring Restful Webservice Example]( / 社区 / 教程 / 春节休息 - 例子 - 教程 - 春节休息 - 网络服务)。

36、你用过的一些重要的春节注释是什么?

我在我的项目中使用的一些春节注释是:

  • 用于Spring MVC项目控制器类。 () ( )* QQ请求映射** — 用于配置控制器处理方法中的 URI映射 。 这是一个非常重要的注释,所以你应该通过春季MVC请求注释示例(- )* 答复Body** - 发送 对象作为响应,通常用于发送XML或JSON数据作为响应. () ( )* QQPathVariable ** – 用于从 URI 映射动态值到处理方法参数. () ( )* * 自动接线** – 用于春豆中的自动接线依赖。 () ( )* Qualifer ** – 有 @ Autowired 注释,以避免出现多例豆类时的混淆. (_ ( )* 服务** — 服务类。 (_) ( )* QQ Scope ** – 用于配置春豆的范围.
  • =============================================================================================================================================================================== ( )* 侧面 J 配置方面和咨询意见的说明,QQ-Aspect**, 在之前, * ** 之后 , * 回合** , ** Pointcut **等

37、我们可以作为控制器处理方法的响应发送一个对象吗?

是的,我们可以使用 @ResponseBody 注释,这就是我们如何在安静的 Web 服务中发送基于 JSON 或 XML 的响应。

如何在春季MVC应用程序中上传文件?

Spring 提供了通过 MultipartResolver接口实现的文件上传的内置支持。它非常易于使用,只需要配置更改才能工作。我们需要写控制器处理方法来处理到来的文件并处理它。 对于一个完整的示例,请参阅 Spring File Upload Example

如何在 Spring Web MVC Framework 中验证表单数据?

Spring 支持基于 JSR-303 注释的验证,还提供了一个验证器接口,我们可以实现创建自己的自定义验证器。

对于定制验证器的实现,我们需要在控制器类中配置它. 对于一个完整的示例,请阅读 Spring MVC Form Validation Example

什么是 Spring MVC Interceptor 以及如何使用?

Spring MVC 拦截器类似于 Servlet 过滤器,允许我们拦截客户端请求并处理它们,我们可以在三个位置拦截客户端请求: preHandle, postHandleafterCompletion

我们可以通过实施HandlerInterceptor接口或通过扩展抽象类 HandlerInterceptorAdapter来创建一个 Spring Interceptor。

我们需要在春豆配置文件中配置拦截器。我们可以定义拦截器来拦截所有客户端请求,或者我们也可以为特定URI映射配置拦截器。 对于详细的示例,请参阅 Spring MVC Interceptor Example

什么是 Spring JdbcTemplate 类型以及如何使用它?

Spring Framework 提供了与 JDBC API 的优良集成,并提供 JdbcTemplate 实用类,我们可以使用它来避免从我们的数据库操作逻辑中删除玻利尔板代码,例如打开/关闭连接、ResultatSet、PreparedStatement 等。

对于 JdbcTemplate 示例,请参阅 [春季 JDBC 示例]( / 社区 / 教程 / 春季-jdbc 示例)。

如何在 Spring Web 应用程序中使用 Tomcat JNDI DataSource?

要使用配置 JNDI DataSource 的 servlet 容器,我们需要在春豆配置文件中配置它,然后将其注入春豆作为依赖物,然后我们可以使用它与JdbcTemplate进行数据库操作。

1<beans:bean id="dbDataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
2    <beans:property name="jndiName" value="java:comp/env/jdbc/MyLocalDB"/>
3</beans:bean>

对于完整的例子,请参阅 Spring Tomcat JNDI 示例

43、春天你会如何实现交易管理?

Spring 框架通过声明交易管理以及程序式交易管理提供交易管理支持,因为它在大多数情况下易于使用和工作,所以声明交易管理最广泛使用。

我们使用@Transactional标注的方法来管理声明交易,我们需要在春豆配置文件中配置 DataSource 的交易管理器。

1<bean id="transactionManager"
2    class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
3    <property name="dataSource" ref="dataSource" />
4</bean>

第44章 什么是春天?

Spring DAO 支持可与 JDBC、Hibernate 等数据访问技术保持一致和轻松的工作,例如,我们有 JdbcDaoSupport、HibernateDaoSupport、JdoDaoSupport 和 JpaDaoSupport 相应的技术。

春季DAO还提供了例外等级的一致性,我们不需要捕捉具体的例外。

45、如何整合春季和休眠框架?

我们可以使用 Spring ORM 模块整合 Spring 和 Hibernate 框架,如果您正在使用 Hibernate 3+ 以 SessionFactory 提供当前会话,那么您应该避免使用 HibernateTemplate 或 HibernateDaoSupport 类,更好地使用 DAO 模式与依赖注入进行整合。

Spring ORM 支持使用 Spring 宣言交易管理,因此您应该利用它,而不是使用 Hibernate 锅炉板代码进行交易管理。

为了更好地理解,你应该通过以下教程:

四、什么是春天安全?

Spring 安全框架专注于在 java 应用程序中提供身份验证和授权,还处理了大多数常见的安全漏洞,如 CSRF 攻击。

通过使用@EnableWebSecurity等注释,在 Web 应用中使用 Spring 安全非常有益和容易,您应该通过以下帖子学习如何使用 Spring 安全框架。

如何将 java.util.properties 注入春豆?

我们必须定义将属性从特定的属性文件中加载的属性Configurer 粒子,然后我们可以使用 Spring EL 支持将属性注入到其他种子依赖中。

1<bean id="propertyConfigurer" 
2  class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
3    <property name="location" value="/WEB-INF/application.properties" />
4</bean> 
5
6<bean class="com.journaldev.spring.EmployeeDaoImpl">
7    <property name="maxReadResults" value="${results.read.max}"/>
8</bean>

如果您正在使用注释来配置春豆,则可以像下面这样注入属性。

1@Value("${maxReadResults}") 
2private int maxReadResults;

48、在 Spring Framework 中使用的一些设计模式?

Spring Framework 使用了许多设计模式,其中一些常见的模式是:

  1. Singleton 模式:创建具有默认范围的豆
  2. Factory Pattern:Bean 工厂类
  3. Proxy 模式:Bean 范围
  4. Adapter 模式:春季 Web 和春季 MVC
  5. [Proxy 模式](/community/tutorials/proxy-design-pattern

49、春季框架的一些最佳实践有哪些?

一些春季框架的最佳做法是:

  • 在计划参考中避免版本编号,以确保我们有最新的配置.
  • 以泉-jdbc.xml,泉-security.xml等关注事项为基础分出泉-豆配置(_ ( )* 对于春MVC中多种上下文使用的春豆,在根上下文中创建并和收听者初始化. (_ ( )* 尽可能配置豆依赖,尽量避免自动接线. (_ ( )* 对于应用程序级别属性,最好的方法是创建属性文件并读取到春季豆类配置文件. (_ ( )* 对于更小的应用,说明是有用的,但对于更大的应用,说明可以成为一种痛苦. 如果我们拥有了XML文件中的所有配置,那么维护它就更容易了. () ( )* 对组件使用正确的说明以方便理解目的. 服务使用@Service, DAO豆使用@Repository. ( ( )* 春季框架有很多模块,使用你需要的. 删除所有通常通过 Spring 工具套件模板创建项目时会添加的额外依赖性 。 () ( )* 如果你在使用"方方面面",请确保加入品脱尽可能地收窄来避免对不想要的方法提出建议. 考虑方便使用的自定义说明并避免任何问题。 () ( )* 当有实际好处时使用依赖性注射, 只是为了松散的结合, (英语)

第50章 什么是春天?

春天启动使春天框架独一无二,它为我们提供了创建不同类型的Java应用程序,并将它们连接到服务器容器运行时环境的轻松方法,所以我们得到一个单一的JAR文件,我们可以运行以执行项目,这节省了我们大量的时间,以获得产品部署准备的骨骼项目非常快。这样,我们可以更专注于商业逻辑,而不是通过构建代码的常见过程,然后在服务器容器上部署它。由于这是一个非常广泛的主题,我建议你通过春天启动采访问题(/社区/教程/春天启动采访问题)。

我希望这些问题会帮助你在即将到来的Java EE采访中。我会继续添加更多问题到列表,一旦我找到他们。

Published At
Categories with 技术
comments powered by Disqus