Spring学习之Bean的装配多种方法

yizhihongxing

Spring学习之Bean的装配多种方法

Spring中的Bean是应用程序的基本构建块之一,而Bean装配指的是将各个Bean组合在一起以创建一个完整的应用程序。在Spring中,有多种方法可以对Bean进行装配。

1. 自动装配

自动装配是Spring中最简单、最便利的装配方式之一。Spring会自动地为一些Bean属性寻找合适的值,并将它们注入到Bean中。自动装配有三种方式:按名称装配、按类型装配、按构造方法装配。

1.1 按名称装配

按名称进行自动装配时,Spring会自动地将与Bean属性同名的Bean注入到属性中。示例如下:

<bean name="student" class="com.example.Student">
    ...
</bean>

<bean name="clazz" class="com.example.Clazz">
    <property name="student" ref="student"/>
    ...
</bean>

上面的例子中,Clazz中的student属性与Student的名称相同,因此Spring会自动地将Student注入到Clazzstudent属性中。

1.2 按类型装配

按类型进行自动装配时,Spring会自动地寻找与Bean属性类型相同的Bean,并将它注入到属性中。示例如下:

<bean name="student" class="com.example.Student">
    ...
</bean>

<bean name="clazz" class="com.example.Clazz">
    <property name="student" type="com.example.Student"/>
    ...
</bean>

上面的例子中,Clazz中的student属性的类型与Student相同,因此Spring会自动地将Student注入到Clazzstudent属性中。

1.3 按构造方法装配

按构造方法进行自动装配时,Spring会自动地根据构造方法的参数类型和名称自动注入相应的Bean。示例如下:

<bean name="student" class="com.example.Student">
    ...
</bean>

<bean name="clazz" class="com.example.Clazz">
    <constructor-arg name="student" ref="student"/>
    ...
</bean>

上面的例子中,Clazz中的构造方法参数为student,与Student的名称相同,因此Spring会自动地将Student注入到Clazz的构造方法中。

2. 基于注解的装配

使用基于注解的方式装配Bean的好处是,代码更加简洁,可读性更好。Spring提供了多种注解用于装配Bean。

2.1 @Autowired注解

使用@Autowired注解可以自动装配Bean,示例如下:

@Component
public class Clazz {
    @Autowired
    private Student student;
    ...
}

上面的例子中,使用@Autowired注解注入Student对象。

2.2 @Qualifier注解

在使用@Autowired注解时,当存在多个同类型的Bean时,Spring无法确定注入哪个Bean。此时可以使用@Qualifier注解指定注入哪个Bean,示例如下:

@Component
public class Clazz {
    @Autowired
    @Qualifier("goodStudent")
    private Student student;
    ...
}

上面的例子中,使用@Qualifier注解指定注入goodStudent

3. Java配置方式装配

Java配置方式装配Bean的优点是可以避免使用XML文件进行配置,更加灵活,可读性更好,示例如下:

@Configuration
public class AppConfig {
    @Bean
    public Student student() {
        return new Student();
    }

    @Bean
    public Clazz clazz() {
        return new Clazz(student());
    }
}

上面的例子中,使用@Configuration注解表明这是一个Java配置类,使用@Bean注解定义Bean。

示例一

简单实现一个Spring Web应用程序,使用自动装配实现Bean的注入。

首先,在pom.xml文件中添加如下依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.2.6.RELEASE</version>
</dependency>

然后,定义两个Bean:

public class Student {
    private String name;
    private String id;

    // 省略Getter和Setter方法
}

@Service
public class StudentService {
    private List<Student> studentList = new ArrayList<>();

    public void addStudent(Student student) {
        studentList.add(student);
    }

    public List<Student> getStudentList() {
        return studentList;
    }
}

StudentService中使用@Service注解表示这是一个服务类。

接下来,在Controller中使用自动装配将StudentService注入:

@RestController
public class StudentController {
    @Autowired
    private StudentService studentService;

    @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
    public void addStudent(Student student) {
        studentService.addStudent(student);
    }

    @RequestMapping(value = "/getStudentList", method = RequestMethod.GET)
    public List<Student> getStudentList() {
        return studentService.getStudentList();
    }
}

上面的代码中,使用了@RestController注解表示这是一个控制器类。

示例二

实现一个Spring Web应用程序,使用基于注解的装配方式实现Bean的注入。

首先,在pom.xml文件中添加如下依赖:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.2.6.RELEASE</version>
</dependency>

定义如下Bean:

public class Student {
    private String name;
    private String id;

    // 省略Getter和Setter方法
}

@Component
public class StudentService {
    private List<Student> studentList = new ArrayList<>();

    public void addStudent(Student student) {
        studentList.add(student);
    }

    public List<Student> getStudentList() {
        return studentList;
    }
}

在Service类中使用@Component注解表示这是一个组件类。

然后,在Controller中使用基于注解的装配方式将StudentService注入:

@RestController
public class StudentController {
    @Autowired
    private StudentService studentService;

    @RequestMapping(value = "/addStudent", method = RequestMethod.POST)
    public void addStudent(Student student) {
        studentService.addStudent(student);
    }

    @RequestMapping(value = "/getStudentList", method = RequestMethod.GET)
    public List<Student> getStudentList() {
        return studentService.getStudentList();
    }
}

上面的代码中,使用了@RestController注解表示这是一个控制器类,使用了@Autowired注解和@Component注解实现了Bean的自动注入。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Spring学习之Bean的装配多种方法 - Python技术站

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

相关文章

  • JSP 相关对象的使用介绍

    JSP(Java Server Pages)是一种在Java EE(Enterprise Edition)应用程序中创建动态网页的技术。在 JSP 页面中,可以使用多个内置对象来帮助 Java 代码与页面交互和实现数据传输。本文将详细介绍 JSP 相关对象的用法。 request request 对象是 JSP 页面中的一个内置对象,它代表 HTTP 请求。…

    Java 2023年6月15日
    00
  • FilenameUtils.getName 函数源码分析

    FilenameUtils.getName 函数源码分析 函数功能简介 FilenameUtils.getName 函数是Apache Commons IO库中的一个函数,主要用于从文件路径中获取文件名。 函数源码分析 以下是 FilenameUtils.getName 函数的源码(Apache Commons IO v2.7版本): public stat…

    Java 2023年6月15日
    00
  • 小程序实现授权登陆的解决方案

    小程序实现授权登录的解决方案是比较复杂的,需要涉及到小程序端和服务端两个方面。在授权登录的过程中,小程序端需要获取用户的授权信息,并将授权信息发送给服务端进行校验,服务端校验成功之后再将返回的用户信息返回给小程序端。以下是实现授权登录的完整攻略: 步骤一:获取用户授权 在小程序中调用 wx.login() 方法获取 code,这个 code 会在后续用来获取…

    Java 2023年5月23日
    00
  • 一文详解Java闭锁和栅栏的实现

    一文详解Java闭锁和栅栏的实现 1. 什么是闭锁和栅栏 在并发编程中,有时需要等待某个操作的完成,或者协调多个线程的执行。Java提供了闭锁(Latch)和栅栏(Barrier)两个机制来实现这种协调。 闭锁是一种同步工具,可以使线程等待一个或多个线程的操作完成。闭锁一般会在某个线程等待另一个线程完成任务时使用。 栅栏是一种同步工具,它允许一组线程在某个点…

    Java 2023年5月26日
    00
  • CentOS 7.9服务器Java部署环境配置的过程详解

    CentOS 7.9 服务器 Java 部署环境配置的过程详解 简介 在 CentOS 7.9 服务器上配置 Java 是一个常见的操作,本文将介绍在 CentOS 7.9 上配置 Java 的详细步骤,同时提供两个示例。 步骤 步骤一:安装 Java 环境 首先需要安装 Java 环境。可以通过 yum 命令进行安装: bash sudo yum inst…

    Java 2023年6月2日
    00
  • 使用java的milo框架访问OPCUA服务的过程

    使用Java的Milo框架访问OPCUA服务的过程包括以下步骤: 引入依赖 在Maven项目中,需要在pom.xml文件中引入以下依赖: <dependencies> <dependency> <groupId>org.eclipse.milo</groupId> <artifactId>milo-…

    Java 2023年5月20日
    00
  • golang实现微信小程序商城后台系统(moshopserver)

    golang实现微信小程序商城后台系统(moshopserver)攻略 1. 介绍 golang实现微信小程序商城后台系统(moshopserver)是一个典型的企业级应用,其涉及了多种技术和框架的使用。其中,moshopserver使用golang语言开发,基于beego框架和MySQL数据库。本文将详细讲解moshopserver的实现流程与步骤。 2.…

    Java 2023年5月23日
    00
  • Spring Boot面试必问之启动流程知识点详解

    下面我将为你详细讲解Spring Boot中启动流程的相关知识点。 1. Spring Boot应用启动原理 Spring Boot的应用启动依赖于Spring框架,其启动过程是基于Spring框架的启动过程进行的。在Spring Boot应用启动过程中,主要包含以下步骤: 加载Spring Boot应用的配置信息; 创建Spring应用上下文Applica…

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