@Autowired自动装配,@Bean注入@Primary,@Qualifier优先级讲解

下面是对@Autowired、@Bean和@Qualifier的详细讲解:

@Autowired自动装配

概念

@Autowired 注解是用于自动将某个类型的 bean 注入到另一个 bean 中的注解。在 Spring 容器中,如果一个接口只被一个具体实现类所实现,那么 Spring 在注入时会自动识别该实现类,并将其注入到另一个 bean 中。

示例

假如有一个UserService接口,它有两个实现类分别是UserServiceImplUserServiceImpl2,我们需要将UserServiceImpl2作为被注入对象。

首先,我们需要在UserServiceImpl2 class 上添加@Service注解,以将该类注入到 Spring 容器:

@Service
public class UserServiceImpl2 implements UserService {
// 省略具体实现方法
}

然后,在需要注入UserServiceImpl2的 class 上,使用@Autowired注解进行注入:

@Service
public class UserController {
  @Autowired
  UserService userService; // 代码中使用注解注入 UserServiceImpl2 实例
// 省略具体实现方法
}

@Bean注入

概念

@Bean注解可以用来将某个对象注册为一个 bean,并将其交由 Spring 容器来管理。

示例

我们可以在一个配置文件中定义一个返回UserDaoImpl@Bean

@Configuration
public class AppConfig {
  @Bean
  UserDao userDao() {
    return new UserDaoImpl();
  }
}

在这个@Configuration类中,方法名就是定义的 bean 名称,而方法返回值就是 bean 的实例。这意味着我们可以在任何需要userDao的地方使用自动装配,例如:

@Service
public class UserServiceImpl implements UserService {
  @Autowired
  UserDao userDao;
// 省略具体实现方法
}

@Primary注解

概念

当我们有多个同一个接口的实现类时,我们需要使用@Primary注解来标识一个默认的实现类。

示例

我们假设有两个实现了UserService接口的类UserServiceImplUserServiceImpl2,并且有一个需要注入 UserService 的类UserController,Spring 怎么知道注入哪个 UserService 实现类呢?

我们可以在其中一个实现类上添加@Primary注解,来告诉 Spring 使用哪个默认的实现类:

@Service
@Primary
public class UserServiceImpl2 implements UserService {
// 省略具体实现方法
}

@Service
public class UserServiceImpl implements UserService {
// 省略具体实现方法
}

这样,在使用自动装配时,如果没有指定使用 UserService 实现类,Spring 就会使用带有@Primary注解的 UserService 实现类。

@Qualifier注解

概念

@Qualifier注解用于针对一个接口有多个实现类的情况下,指定使用哪个实现类进行注入。

示例

我们假设有两个实现了UserService接口的类UserServiceImplUserServiceImpl2,我们需要在需要注入 UserService 的类中,使用@Qualifier注解指定使用哪个 UserService 实现类进行注入:

@Service
public class UserController {
  @Autowired
  @Qualifier("userServiceImpl2") // 显式指定使用 UserServiceImpl2
  UserService userService;
// 省略具体实现方法
}

@Qualifier中使用实现类的名称,来告诉 Spring 使用哪个具体的实现类。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:@Autowired自动装配,@Bean注入@Primary,@Qualifier优先级讲解 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • 关于Java中对象的向上转型和向下转型

    什么是多态? 同一个类调用同一个方法会产生不同的影响/结果 这就是多态 public class Pet{ public void eat(){ System.out.println(“Pet eat…”) } } class Dog extends Pet{ public void eat(){ System.out.pringln(“Dog eat.…

    Java 2023年4月22日
    00
  • java表单提交中文乱码的解决方法

    针对Java表单提交中文乱码的解决方法,我们可以从服务器和浏览器两个方面入手,以下是完整的攻略: 一、服务器端解决方案 1.1 设置请求编码与响应编码 在服务器端,我们可以通过设置请求编码和响应编码来解决Java表单提交中文乱码问题。 request.setCharacterEncoding("UTF-8"); response.setC…

    Java 2023年5月20日
    00
  • JavaWeb文件上传开发实例

    JavaWeb文件上传开发实例 在JavaWeb开发中,文件上传是一个常见的功能。本篇文章将为大家介绍如何在JavaWeb项目中实现文件上传的功能。 1. 前置条件 在开发文件上传功能前,需要先了解JavaWeb中FileUpload组件。FileUpload组件是Apache提供的一个工具包,用于在Web应用中处理文件上传功能。我们需要从官方网站上下载Fi…

    Java 2023年5月19日
    00
  • 常见的Java字节码插装工具有哪些?

    常见的Java字节码插装工具有很多,其中比较常用的有ASM、Javassist、Byte Buddy和Instrumentation,下面具体介绍它们的使用方法以及示例。 一、 ASM 1.1 简介 ASM是一个Java字节码操作框架,它可以用来动态生成和转换Java字节码。与Java自带的Instrumentation机制类似,ASM扫描字节码时,会向字节…

    Java 2023年5月11日
    00
  • Java中的异常处理用法及其架构和使用建议

    Java中的异常处理用法及其架构和使用建议 异常处理用法 Java中的异常处理用于处理程序中出现的错误和异常情况。它可以让程序在出现问题时进行清晰的错误提示,从而防止程序异常崩溃。Java中的异常处理分为两种类型:Checked Exception和Unchecked Exception。 Checked Exception Checked Exceptio…

    Java 2023年5月27日
    00
  • Java算法实战之排一亿个随机数

    Java算法实战之排一亿个随机数 在算法领域,对于大数据量的排序问题,测试算法的性能和效果时,需要使用更大数据集的测试样本。本文介绍如何使用Java语言排序一亿个随机数,并讨论相关算法和优化技术。 准备工作 在进行排序之前,我们需要准备一个包含一亿个随机数的数组,这可以使用Java中的Random类和Arrays类来实现。具体代码如下: import jav…

    Java 2023年5月19日
    00
  • Tomcat配置必备的10个小技巧用法总结

    Tomcat配置必备的10个小技巧用法总结 Tomcat是一个常用的Java Web服务器,本文将介绍10个Tomcat配置小技巧,帮助优化Tomcat的性能和使用。 1. 调整Tomcat的内存使用 Tomcat启动时会分配一定的内存,可以通过JAVA_OPTS环境变量调整。例如,将最大内存设置为512MB,最小内存设置为128MB: export CAT…

    Java 2023年5月19日
    00
  • Spring Boot中使用Spring MVC的示例解析

    Spring Boot中使用Spring MVC的示例解析 在开始使用Spring MVC之前,我们需要先安装并配置好Spring Boot和Spring MVC。安装时我们可以使用Spring官方提供的脚手架工具spring initilizr,也可以直接在IDE中创建Spring Boot项目并选择其中包含Spring MVC的依赖。 安装完毕之后,我们…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部