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

目录

​编辑

4、注解

4.1、什么是基于注解的容器配置

[4.2、如何在 spring 中启动注解装配?](#4.2、如何在 spring 中启动注解装配?)

[4.3、Component, Controller, Repository,Service 有何区别?](#4.3、Component, Controller, Repository,Service 有何区别?)

[4.4、Required 注解有什么用?](#4.4、Required 注解有什么用?)

[4.5、Autowired 注解有什么用?](#4.5、Autowired 注解有什么用?)

[4.6、Qualifier 注解有什么用?](#4.6、Qualifier 注解有什么用?)

[4.7、RequestMapping 注解有什么用?](#4.7、RequestMapping 注解有什么用?)

5、数据访问

[5.1、spring DAO 有什么用?](#5.1、spring DAO 有什么用?)

[5.2、列举 Spring DAO 抛出的异常。](#5.2、列举 Spring DAO 抛出的异常。)

[5.3、spring JDBC API 中存在哪些类?](#5.3、spring JDBC API 中存在哪些类?)

[5.4、使用 Spring 访问 Hibernate 的方法有哪些?](#5.4、使用 Spring 访问 Hibernate 的方法有哪些?)

[5.5、列举 spring 支持的事务管理类型](#5.5、列举 spring 支持的事务管理类型)

[5.6、spring 支持哪些 ORM 框架](#5.6、spring 支持哪些 ORM 框架)


4、注解

4.1、什么是基于注解的容器配置

不使用 XML 来描述 bean 装配,开发人员通过在相关的类,方法或字段声明上使用注解将配置移动到组件类本身。它可以作为 XML 设置的替代方案。例如:Spring 的 Java 配置是通过使用 Bean 和 Configuration 来实现。Bean 注解扮演与 元素相同的角色。 Configuration 类允许通过简单地调用同一个类中的其他 Bean 方法来定义 bean 间依赖关系。

例如:

复制代码
@Configuration
public class StudentConfig {
    @Bean
    public StudentBean myStudent() {
        return new StudentBean();
    }
}

4.2、如何在 spring 中启动注解装配?

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


4.3、Component, Controller, Repository,Service 有何区别?

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

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

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

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


4.4、Required 注解有什么用?

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

示例:

复制代码
public class Employee {
    private String name;
    @Required
    public void setName(String name){
        this.name=name;
    }
    public string getName(){
        return name;
    }
}

4.5、Autowired 注解有什么用?

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

复制代码
public class Employee {
    private String name;
    @Autowired
    public void setName(String name) {
        this.name=name;
    }
    public string getName(){
        return name;
    }
}

4.6、Qualifier 注解有什么用?

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

例如,这里我们分别有两个类,Employee 和 EmpAccount。在 EmpAccount中,使用Qualifier 指定了必须装配 id 为 emp1 的 bean。

Employee.java

复制代码
public class Employee {
    private String name;
    @Autowired
    public void setName(String name) {
        this.name=name;
    }
    public string getName() {
        return name;
    }
}

EmpAccount.java

复制代码
public class EmpAccount {
    private Employee emp;
    @Autowired
    @Qualifier(emp1)
    public void showName() {
        System.out.println("Employee name : "+emp.getName);
    }
}

4.7、RequestMapping 注解有什么用?

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

类级别:映射请求的 URL

方法级别:映射 URL 以及 HTTP 请求方法


5、数据访问

5.1、spring DAO 有什么用?

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


5.2、列举 Spring DAO 抛出的异常。


5.3、spring JDBC API 中存在哪些类?

(1)JdbcTemplate

(2)SimpleJdbcTemplate

(3)NamedParameterJdbcTemplate

(4)SimpleJdbcInsert

(5)SimpleJdbcCall


5.4、使用 Spring 访问 Hibernate 的方法有哪些?

我们可以通过两种方式使用 Spring 访问 Hibernate:

(1)使用 Hibernate 模板和回调进行控制反转

(2)扩展 HibernateDAOSupport 并应用 AOP 拦截器节点


5.5、列举 spring 支持的事务管理类型

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

1、 程序化事务管理:在此过程中,在编程的帮助下管理事务。它为您提供极大的灵活性,但维护起来非常困难。

2、声明式事务管理:在此,事务管理与业务代码分离。仅使用注解或基于 XML的配置来管理事务。


5.6、spring 支持哪些 ORM 框架

Hibernate、iBatis、JPA、JDO、OJB


要想了解更多:

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

相关推荐
XiaoLeisj16 分钟前
【MyBatis】深入解析 MyBatis XML 开发:增删改查操作和方法命名规范、@Param 重命名参数、XML 返回自增主键方法
xml·java·数据库·spring boot·sql·intellij-idea·mybatis
风象南17 分钟前
SpringBoot实现数据库读写分离的3种方案
java·spring boot·后端
振鹏Dong23 分钟前
策略模式——本质是通过Context类来作为中心控制单元,对不同的策略进行调度分配。
java·策略模式
ChinaRainbowSea33 分钟前
3. RabbitMQ 的(Hello World) 和 RabbitMQ 的(Work Queues)工作队列
java·分布式·后端·rabbitmq·ruby·java-rabbitmq
生无谓33 分钟前
SpringAop动态代理和AspectJ静态代理
spring
雾月5533 分钟前
LeetCode 914 卡牌分组
java·开发语言·算法·leetcode·职场和发展
melck1 小时前
liunx日志查询常用命令总结
java·服务器·网络
守护者1701 小时前
JAVA学习-练习试用Java实现“实现一个Hadoop程序,使用Hive进行复杂查询和数据筛查”
java·学习
程序员 小柴1 小时前
docker的与使用
java·docker·eureka
ゞ 正在缓冲99%…1 小时前
leetcode76.最小覆盖子串
java·算法·leetcode·字符串·双指针·滑动窗口