03---java面试八股文——spring-----注解-------10题

news/2024/10/18 15:43:37/

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

  1. 基于注解的容器配置是指使用注解来代替传统的 XML 配置文件,来配置 Spring 容器和 bean。在基于注解的配置中,开发者可以使用注解来声明 bean、注入依赖关系、管理事务等,而不需要显式地在 XML 配置文件中进行配置。
    • 使用基于注解的容器配置可以简化配置过程,并且使得配置更加直观和易于理解。通过注解,开发者可以在类和方法上添加一些特定的注解,告诉 Spring 容器如何管理这些类和方法。

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

  1. 第一步:配置组件扫描:首先,需要在 Spring 配置中启用组件扫描,以便 Spring 容器能够自动检测和注册带有特定注解的组件(例如 @Component、@Service、@Repository、@Controller 等)。在 XML 配置文件中,可以使用 <context:component-scan> 元素来配置组件扫描,指定要扫描的基础包路径。(默认情况下,Spring 容器中未打开注解装配。因此,要使用基于注解装配,我们必须通过配置<context:annotation-config/>元素在 Spring 配置文件中启用它。)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 第一步--><context:component-scan base-package="com.knife"/></beans>
  1. 配置注解驱动:如果需要使用其他基于注解的特性,例如自动装配(@Autowired)、资源加载(@Value)、事务管理(@Transactional)等,还需要在 Spring 配置中启用相应的注解驱动功能。可以使用<context:annotation-config>或者 <context:annotation-driven> 元素来启用注解驱动。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 第一步--><context:component-scan base-package="com.knife"/><!-- 第二步--><context:annotation-config /><!-- 	<context:annotation-driven /> --></beans>

23、@Component, @Controller, @Repository,@Service有何区别?

  1. 在Spring框架中,@Component, @Controller, @Repository, 和 @Service 是用来对不同类型的类进行标注的注解,它们都是 @Component 的特殊化,因此它们在某种程度上有相似的功能,但是它们在语义上有所不同,同时也影响着Spring框架对它们的处理方式。它们的主要区别如下:
    • @Component:@Component 是一个通用的注解,用来指示一个类是Spring组件。它可以用在任何类上,表示该类将被Spring自动检测并注册为一个bean。
      • 通常情况下,@Component 用于通用的组件类,没有更具体的角色。
    • @Controller:@Controller 用于标注控制器类,通常是处理Web请求的控制器。它接收HTTP请求并响应相应的HTTP响应,
      • 通常用于构建Web应用程序的后端控制器。在Spring MVC中,@Controller 通常用于标识处理HTTP请求的类。标有它的Bean 会自动导入到 IoC 容器中
    • @Repository:@Repository 用于标注数据访问层(DAO)的类。它通常与数据库交互,执行数据存取、检索等操作。
      • @Repository 注解提供了将数据库异常转换为Spring的数据访问异常的功能。(它将 DAO 导入 IoC 容器,并使未经检查的异常有资格转换为 Spring DataAccessException。)
    • @Service:@Service 用于标注服务层的类,提供业务逻辑的服务。它通常包含应用程序的核心业务逻辑,调用DAO层进行数据访问。
      • @Service 类似于传统的业务逻辑层或服务层,在应用程序中包含了处理业务逻辑的方法。

24、@Required 注解有什么用?

  1. @Required 注解用于标记在 Spring Bean 属性的 setter 方法上,指示 Spring 在装配 bean 时该属性是必需的,即必须要设置一个非空值,否则会抛出 BeanInitializationException 异常。
  2. 这个注解的作用是在装配 bean 时进行验证,确保在属性注入之前必须设置相应的值,以避免因为属性未被设置而导致的潜在问题。
  3. 在使用 @Required 注解时,需要注意以下几点:
    • @Required 注解只能用于 setter 方法。
    • 如果使用 XML 配置文件进行装配,@Required 注解并不会被解析,因此无法生效。
    • 在基于注解的装配中,@Required 注解通常不太常用,因为通常可以通过 @Autowired 和 @Value 注解来完成属性的自动装配和赋值。

25、@Autowired注解有什么用?

  1. @Autowired 注解用于自动装配 bean 的依赖关系。它可以被用来标注在类的字段、构造函数、setter 方法或者配置类的方法上,以实现自动注入所需的依赖。

  2. 具体来说,@Autowired 注解的作用有以下几个方面:

    • 自动装配:当 Spring 容器启动时,它会自动搜索并注入符合类型要求的 bean 实例到带有 @Autowired 注解的字段、方法或者构造函数中。这样就无需手动编写代码来显式地获取依赖对象,Spring 容器会自动完成依赖的注入。
    • 类型匹配:如果存在多个类型匹配的 bean,则 Spring 会根据类型来进行匹配和注入。如果想要根据名称进行匹配,可以结合 @Qualifier 注解一起使用。
    • 可选依赖:@Autowired 注解默认情况下要求依赖对象必须存在,如果找不到匹配的 bean,则会抛出异常。但是可以通过设置 required 属性为 false,来允许依赖对象为 null。
    • 依赖注入的方式:@Autowired 注解可以用在字段、构造函数、setter 方法或者配置类的方法上,因此可以根据个人喜好选择合适的依赖注入方式。

@Qualifier 注解有什么用?

  1. @Qualifier 注解用于与 @Autowired 注解一起使用,帮助 Spring 选择特定的 bean 进行注入,解决多个类型匹配的问题。
  2. 当一个接口或者抽象类有多个具体实现时,Spring 容器无法确定要注入哪一个具体实现。这时,可以结合 @Autowired 和 @Qualifier 注解一起使用,通过指定 bean 的名称或者限定符来解决歧义,告诉 Spring 容器应该选择哪一个 bean 进行注入。
  3. 具体来说,@Qualifier 注解有以下几种使用方式:
      1. 通过名称限定:指定要注入的 bean 的名称,让 Spring 容器根据名称来选择
      1. 通过限定符限定:通过自定义限定符来限定要注入的 bean,结合自定义的限定符注解一起使用。

通过名称限定

@Autowired
@Qualifier("specificBeanName")
private MyDependency dependency;

通过限定符限定:在这个示例中,MyQualifierAnnotation 是一个自定义的限定符注解,用于标识具体的 bean。

@Autowired
@MyQualifierAnnotation
private MyDependency dependency;
  • 通过 @Qualifier 注解,可以明确指定要注入的 bean,从而解决多个类型匹配的问题,确保 Spring 容器能够正确地选择并注入所需的依赖。

27、@RequestMapping注解有什么用?

  1. @RequestMapping 是 Spring MVC 中的一个注解,用于将HTTP请求 映射 到控制器的处理方法上。它告诉 Spring MVC 何时调用特定的方法来处理请求。
    • 此注解可应用于两个级别:
      • 类级别:映射请求的 URL
      • 方法级别:映射 URL 以及 HTTP 请求方法
  2. 具体来说,@RequestMapping 注解有以下几个用途:
    • 处理请求映射:@RequestMapping 注解用于将 HTTP 请求映射到控制器的处理方法上。可以标注在类级别或者方法级别。当标注在类级别时,表示该类中的所有处理方法都共享相同的路径前缀。
    • 定义请求路径:通过指定请求路径(URL)来定义请求的路径模式。可以使用 Ant 风格的路径模式(例如 /users/*、/users/{id})或者正则表达式。
    • 指定请求方法:@RequestMapping 注解还可以用于指定处理请求的 HTTP 方法。可以使用 method 属性来指定支持的 HTTP 方法,例如 GET、POST、PUT、DELETE 等。
    • 处理请求参数:@RequestMapping 注解还可以处理请求参数,可以通过 params 属性来指定请求参数的条件。
    • 处理请求头信息:@RequestMapping 注解还可以处理请求头信息,可以通过headers属性来指定请求头信息的条件。

示例:

@Controller
@RequestMapping("/users")
public class UserController {@GetMapping("/{id}")public String getUser(@PathVariable("id") Long userId) {// 处理获取用户信息的逻辑return "user-details";}@PostMappingpublic String createUser(@RequestBody User user) {// 处理创建用户的逻辑return "redirect:/users/" + user.getId();}
}

在这个示例中,@RequestMapping 注解将 /users 路径映射到 UserController 控制器上。@GetMapping 注解将 /users/{id} 路径映射到 getUser 方法上,并指定了请求的 HTTP 方法为 GET。@PostMapping 注解将 /users 路径映射到 createUser 方法上,并指定了请求的 HTTP 方法为 POST。

28、@RequestBody 注解有什么用?

  1. @RequestBody 注解用于将 HTTP 请求的内容(例如 JSON 或 XML 格式的数据)绑定到方法的参数上,表示请求体的内容应该被映射到被注解标注的方法参数上

  2. 具体来说,@RequestBody 注解的作用有以下几个方面:

    • 接收请求体数据:@RequestBody 注解用于接收 HTTP 请求的请求体数据,通常用于处理 POST 或 PUT 请求,其中请求体中包含的是客户端传递的数据。
    • 自动转换为对象:当请求体数据是 JSON 或 XML 格式时,Spring MVC 会自动将请求体的内容转换为 Java 对象。Spring 使用内置的消息转换器来完成从请求体到对象的转换。
    • 处理复杂数据类型:@RequestBody 注解通常用于处理复杂的数据类型,例如表单提交、JSON 数据等。在这些情况下,直接通过方法参数来接收请求体的内容更加方便和灵活。

示例:

@PostMapping("/createUser")
public ResponseEntity<String> createUser(@RequestBody User user) {// 处理从请求体中接收到的用户对象userService.save(user);return ResponseEntity.ok("User created successfully");
}

在这个示例中,@RequestBody 注解标注在 createUser 方法的 user 参数上,表示从 HTTP 请求的请求体中接收到的 JSON 或 XML 数据会被转换为 User 对象。这样,我们就可以直接在方法中处理 User 对象,而不需要手动解析请求体的内容。

29、@ResponseBody 注解有什么用?

  1. @ResponseBody 注解用于将方法的返回值直接作为 HTTP 响应的主体(Body)发送给客户端,而不是通过视图解析器渲染成视图。它通常用于 RESTful Web 服务中,用于返回 JSON、XML 或其他格式的数据给客户端。
  2. 具体来说,@ResponseBody 注解的作用有以下几个方面:
    • 将方法返回值序列化为响应体:当控制器方法被 @ResponseBody 注解标记时,方法的返回值将被自动序列化为指定格式(如 JSON、XML 等)的数据,并作为 HTTP 响应的主体内容返回给客户端。
    • 省略视图解析器:与传统的 Spring MVC 视图解析器不同,@ResponseBody 注解直接将数据作为响应的主体,省略了视图解析器的步骤,因此适用于 RESTful 服务等不需要渲染页面的情况。
    • 处理复杂数据类型:@ResponseBody 注解通常用于处理复杂的数据类型,例如返回 JSON 或 XML 格式的数据给客户端。Spring 使用内置的消息转换器来完成从对象到响应体的转换。

示例:

@GetMapping("/user/{id}")
@ResponseBody
public ResponseEntity<User> getUser(@PathVariable("id") Long userId) {User user = userService.getUserById(userId);if (user != null) {return ResponseEntity.ok(user);} else {return ResponseEntity.notFound().build();}
}

在这个示例中,@ResponseBody 注解标注在 getUser 方法上,表示该方法的返回值(User 对象)会被直接序列化为 JSON 格式的数据,并作为 HTTP 响应的主体内容返回给客户端。

30、@Configuration 注解有什么用?

  1. @Configuration 注解用于标识一个类为 Spring 的配置类,告诉 Spring 容器该类中包含了一个或多个 bean 的配置信息。
  2. 具体来说,@Configuration 注解的作用有以下几个方面:
    • 定义配置类:@Configuration 注解用于定义一个配置类,通常在这个类中会包含一些用于配置 bean 的方法。这些方法可以使用 @Bean 注解来声明 bean,也可以使用其他 Spring 注解来配置 bean 的相关信息。
    • 替代 XML 配置:与传统的 XML 配置文件相比,@Configuration 注解提供了一种更加简洁和类型安全的配置方式。通过 Java 类来配置 bean,可以更方便地进行代码版本控制和重构,并且可以利用 Java 编译器的类型检查和自动补全功能。
    • 支持基于 Java 的装配:@Configuration 注解结合 @Bean 注解可以支持基于 Java 的装配方式,即通过 Java 代码来定义和配置 bean,而不是依赖于 XML 配置文件。
    • 支持条件化配置:@Configuration 注解还支持条件化配置,可以结合 @Conditional 注解来根据条件来决定是否创建特定的 bean。这样可以根据不同的环境或者条件来灵活地配置应用程序。

示例:

@Configuration
public class AppConfig {@Beanpublic UserService userService() {return new UserServiceImpl();}@Beanpublic UserRepository userRepository() {return new UserRepositoryImpl();}
}

在这个示例中,AppConfig 类被 @Configuration 注解标注,表示这是一个配置类。userService() 和 userRepository() 方法被 @Bean 注解标注,用于声明并配置了两个 bean,分别是 UserService 和 UserRepository。当 Spring 容器启动时,会根据这个配置类来创建和管理相应的 bean。


http://www.ppmy.cn/news/1401889.html

相关文章

Linux(centos7)部署hive

前提环境: 已部署完hadoop(HDFS 、MapReduce 、YARN) 1、安装元数据服务MySQL 切换root用户 # 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysqL-2022 # 安装Mysql yum库 rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm # yu…

CSS:样式

1. 引入方式 <!-- 方式一&#xff1a;行内式 通过元素的style属性引入样式 语法&#xff1a;style"样式1&#xff1a;值; 样式2&#xff1a;值; ... " 缺点&#xff1a;1.代码复用率低&#xff0c;不利于维护。比如&#xff1a;定义多个相同的按钮要重复书写 2.cs…

http 超全状态码

HTTP&#xff08;超文本传输协议&#xff09;是一种用于传输超文本的应用层协议。在进行HTTP通信时&#xff0c;服务器会向客户端返回一个状态码&#xff0c;用于表示请求的处理结果。 状态码由3位数字组成&#xff0c;使用第1个数字表示响应的类别&#xff0c;一共5种&#x…

pytest--python的一种测试框架--request请求加入headers

一、request headers中的cookie和session机制的作用与区别 Cookie 和 Session 是两种在客户端和服务器之间保持状态的技术。HTTP 协议本身是无状态的&#xff0c;这意味着服务器无法从上一次的请求中保留任何信息到下一次请求。Cookie 和 Session 机制就是为了解决这个问题。 …

uniapp微信小程序消息订阅详解

一、微信公众平台申请订阅模板 注意&#xff1a;订阅信息 这个事件 是 当用户 点击的时候触发 或者 是 支付成功后触发&#xff0c; 用户勾选 “总是保持以上选择&#xff0c;不再询问” 之后或长期订阅&#xff0c;下次订阅调用 wx.requestSubscribeMessage 不会弹窗&#xf…

CrossOver软件2024免费 最新版本详细介绍 CrossOver软件好用吗 Mac电脑玩Windows游戏

CrossOver是一款由CodeWeavers公司开发的软件&#xff0c;它可以在Mac和Linux等操作系统上运行Windows软件&#xff0c;而无需在计算机上安装Windows操作系统。这款软件的核心技术是Wine&#xff0c;它是一种在Linux和macOS等操作系统上运行Windows应用程序的开源软件。 Cross…

牛角工具箱源码 轻松打造个性化在线工具箱

&#x1f389; Whats this&#xff1f; 这是一款在线工具箱程序&#xff0c;您可以通过安装扩展增强她的功能 通过插件模板的功能&#xff0c;您也可以把她当做网页导航来使用~ 觉得该项目不错的可以给个Star~ &#x1f63a; 演示地址 https://tool.aoaostar.com &#x1f…

GET 与 POST(计算机网络)

GET &#xff1a;从服务器获取指定的资源。 POST &#xff1a;根据请求负荷&#xff08;报文body&#xff09;对指定的资源做出处理。 GET 和 POST 方法都是安全和幂等的吗&#xff1f; 在 HTTP 协议里安全和幂等的概念&#xff1a; 「安全」&#xff1a;请求方法不会「破坏」…