互联网Java工程师面试题·Spring篇·第二弹

news/2024/5/19 0:27:33 标签: java, spring, 开发语言, 后端, JDBC, BIOB

目录

3、Beans

spring%20bean%EF%BC%9F-toc" style="margin-left:40px;">3.1、什么是 spring bean?

spring%20%E6%8F%90%E4%BE%9B%E4%BA%86%E5%93%AA%E4%BA%9B%E9%85%8D%E7%BD%AE%E6%96%B9%E5%BC%8F%EF%BC%9F-toc" style="margin-left:40px;">3.2、spring 提供了哪些配置方式?

spring%20%E6%94%AF%E6%8C%81%E9%9B%86%E4%B8%AD%20bean%20scope%EF%BC%9F-toc" style="margin-left:40px;">3.3、spring 支持集中 bean scope?

spring%20bean%20%E5%AE%B9%E5%99%A8%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E6%98%AF%E4%BB%80%E4%B9%88%E6%A0%B7%E7%9A%84%EF%BC%9F-toc" style="margin-left:40px;">3.4、spring bean 容器的生命周期是什么样的?

spring%20%E7%9A%84%E5%86%85%E9%83%A8%20bean%EF%BC%9F-toc" style="margin-left:40px;">3.5、什么是 spring 的内部 bean?

spring%20%E8%A3%85%E9%85%8D-toc" style="margin-left:40px;">3.6、什么是 spring 装配

3.7、自动装配有哪些方式?

3.8、自动装配有什么局限?

3、Beans

spring%20bean%EF%BC%9F" style="background-color:transparent;">3.1、什么是 spring bean?

(1)它们是构成用户应用程序主干的对象。

(2)Bean 由 Spring IoC 容器管理。

(3)它们由 Spring IoC 容器实例化,配置,装配和管理。

(4)Bean 是基于用户提供给容器的配置元数据创建。


spring%20%E6%8F%90%E4%BE%9B%E4%BA%86%E5%93%AA%E4%BA%9B%E9%85%8D%E7%BD%AE%E6%96%B9%E5%BC%8F%EF%BC%9F">3.2、spring 提供了哪些配置方式?

基于 xml 配置

        bean 所需的依赖项和服务在 XML 格式的配置文件中指定。这些配置文件通常包含许多 bean 定义和特定于应用程序的配置选项。它们通常以 bean 标签开头。例如:

<bean id="studentbean" class="org.edureka.firstSpring.StudentBean">
 <property name="name" value="Edureka"></property>
</bean>

基于注解配置

        您可以通过在相关的类,方法或字段声明上使用注解,将 bean 配置为组件类本身,而不是使用 XML 来描述 bean 装配。默认情况下,Spring 容器中未打开注解装配。因此,您需要在使用它之前在 Spring 配置文件中启用它。例如:

<beans>
<context:annotation-config/>
<!-- bean definitions go here -->
</beans>

基于 Java API 配置

Spring 的 Java 配置是通过使用 Bean 和 Configuration 来实现。

1、 Bean 注解扮演与 <bean/> 元素相同的角色。

2、Configuration 类允许通过简单地调用同一个类中的其他 Bean 方法来定义 bean 间依赖关系。

例如:

@Configuration
public class StudentConfig {
        @Bean
        public StudentBean myStudent() {
            return new StudentBean();
}
}

spring%20%E6%94%AF%E6%8C%81%E9%9B%86%E4%B8%AD%20bean%20scope%EF%BC%9F">3.3、spring 支持集中 bean scope?

Spring bean 支持 5 种 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 时,最后三个才可用。


spring%20bean%20%E5%AE%B9%E5%99%A8%E7%9A%84%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E6%98%AF%E4%BB%80%E4%B9%88%E6%A0%B7%E7%9A%84%EF%BC%9F">3.4、spring bean 容器的生命周期是什么样的?

spring bean 容器的生命周期流程如下:

1、Spring 容器根据配置中的 bean 定义中实例化 bean。

2、Spring 使用依赖注入填充所有属性,如 bean 中所定义的配置。

3、如果 bean 实现BeanNameAware 接口,则工厂通过传递 bean 的 ID 来调用setBeanName()。

4、如果 bean 实现 BeanFactoryAware 接口,工厂通过传递自身的实例来调用setBeanFactory()。

5、如果存在与 bean 关联的任何BeanPostProcessors,则调用 preProcessBeforeInitialization() 方法。

6、如果为 bean 指定了 init 方法( <bean> 的 init-method 属性),那么将调用它。

7、最后,如果存在与 bean 关联的任何 BeanPostProcessors,则将调用 postProcessAfterInitialization() 方法。

8、如果 bean 实现DisposableBean 接口,当 spring 容器关闭时,会调用 destory()。

9、如果为bean 指定了 destroy 方法( <bean> 的 destroy-method 属性),那么将调用它。


spring%20%E7%9A%84%E5%86%85%E9%83%A8%20bean%EF%BC%9F">3.5、什么是 spring 的内部 bean?

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

例如,假设我们有一个 Student 类,其中引用了 Person 类。这里我们将只创建一个 Person 类实例并在 Student 中使用它。

Student.java

public class Student {
    private Person person;
    //Setters and Getters
}
    public class Person {
        private String name;
        private String address;
        //Setters and Getters
}
bean.xml
<bean id=“StudentBean" class="com.edureka.Student">
    <property name="person">
        <!--This is inner bean -->
        <bean class="com.edureka.Person">
            <property name="name" value=“Scott"></property>
            <property name="address" value=
“Bangalore"></property>
        </bean>
    </property>
</bean>

spring%20%E8%A3%85%E9%85%8D">3.6、什么是 spring 装配

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


3.7、自动装配有哪些方式?

        Spring 容器能够自动装配 bean。也就是说,可以通过检查 BeanFactory 的内容让 Spring 自动解析 bean 的协作者。

自动装配的不同模式:

        no - 这是默认设置,表示没有自动装配。应使用显式 bean 引用进行装配。byName - 它根据 bean 的名称注入对象依赖项。它匹配并装配其属性与 XML文件中由相同名称定义的 bean。byType - 它根据类型注入对象依赖项。如果属性的类型与 XML 文件中的一个 bean 名称匹配,则匹配并装配属性。构造函数- 它通过调用类的构造函数来注入依赖项。它有大量的参数。autodetect - 首先容器尝试通过构造函数使用 autowire 装配,如果不能,则尝试通过 byType 自动装配。


3.8、自动装配有什么局限?

        覆盖的可能性 - 您始终可以使用 <constructor-arg> 和 <property> 设置指定依赖项,这将覆盖自动装配。基本元数据类型 - 简单属性(如原数据类型,字符串和类)无法自动装配。令人困惑的性质 - 总是喜欢使用明确的装配,因为自动装配不太精确。


要想了解更多:

千题千解·Java面试宝典_时光の尘的博客-CSDN博客


http://www.niftyadmin.cn/n/5116332.html

相关文章

从磁盘刷新频率,文件大小,重启性能,数据安全,等五方面对比 RDB 备份和 AOF 备份的区别,并说明项目最终使用 RDB 的原因

RDB备份和AOF备份是Redis中常用的两种持久化方式。它们在磁盘刷新频率、文件大小、重启性能、数据安全等方面有以下区别&#xff1a; 1. 磁盘刷新频率&#xff1a; - RDB备份&#xff1a;RDB备份是通过将Redis的内存数据定期快照保存到磁盘上的RDB文件中。可以通过配置RDB备…

c语言刷题(第8周)

输入整数m,n&#xff08;m&#xff1c;n&#xff09;&#xff0c;输出[m,n]之间所有能被3&#xff0c;不能被4整除的所有数并求和&#xff0c;输出时每行显示5个数。 题干输入整数m,n&#xff08;m&#xff1c;n&#xff09;&#xff0c;输出[m,n]之间所有能被3&#xff0c;不…

FTP服务器操作手册

FTP服务器(File Transfer Protocol Server)是在互联网上提供文件存储和访问服务的计算机&#xff0c;它们依照FTP协议提供服务。FTP协议是File Transfer Protocol(文件传输协议)&#xff0c;专门用来传输文件的协议。FTP服务器是企业里经常用到的服务器&#xff0c;今天就介绍一…

力扣每日一题61:旋转链表

题目描述&#xff1a; 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3]示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k 4 输…

概率论_概率公式中的分号(;)、逗号(,)、竖线(|) 及其优先级

目录 1.概率公式中的分号(;)、逗号(,)、竖线(|) 2.各种概率相关的基本概念 2.1 联合概率 2.2 条件概率&#xff08;定义&#xff09; 2.3 全概率(乘法公式的加强版) 2.4 贝叶斯公式 贝叶斯定理的公式推导 1.概率公式中的分号(;)、逗号(,)、竖线(|) ; 分号代表前后是两类…

基于深度学习网络的手势识别算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(pwd)); rng(default)load gnet.mat[Pr…

Node.js与npm版本比对

Node.js与npm版本比对 Node.js与npm版本比对版本对比表Node版本对比 Node.js与npm版本比对 我们在项目开发过程中&#xff0c;经常会遇到公司一些老的前端工程项目&#xff0c;而我们当前的node及npm版本都是相对比较新的了。 在运行以前工程时&#xff0c;会遇到相关环境不匹…

万界星空科技/免费MES系统/开源MES/免费追溯管理

开源系统概述&#xff1a; 万界星空科技免费MES、开源MES、商业开源MES、市面上最好的开源MES、MES源代码、免费MES、免费智能制造系统、免费排产系统、免费排班系统、免费质检系统、免费生产计划系统、免费仓库管理系统、免费出入库管理系统、免费可视化数字大屏。 万界星空…