spring——Spring Bean属性注入——setter 注入

Dear 丶 2024-03-31 17:23 211阅读 0赞

setter 注入

我们可以通过 Bean 的 setter 方法,将属性值注入到 Bean 的属性中。
在 Spring 实例化 Bean 的过程中,IoC 容器首先会调用默认的构造方法(无参构造方法)实例化 Bean(Java 对象),然后通过 Java 的反射机制调用这个 Bean 的 setXxx() 方法,将属性值注入到 Bean 中。
使用 setter 注入的方式进行属性注入,大致步骤如下:

    1. 在 Bean 中提供一个默认的无参构造函数(在没有其他带参构造函数的情况下,可省略),并为所有需要注入的属性提供一个 setXxx() 方法;
    2. 在 Spring 的 XML 配置文件中,使用 及其子元素 对 Bean 进行定义;
    3. 元素内使用 元素对各个属性进行赋值。

项目依赖:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.example</groupId>
  7. <artifactId>ssw</artifactId>
  8. <version>1.0-SNAPSHOT</version>
  9. <properties>
  10. <maven.compiler.source>8</maven.compiler.source>
  11. <maven.compiler.target>8</maven.compiler.target>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>org.springframework</groupId>
  16. <artifactId>spring-context</artifactId>
  17. <version>5.2.5.RELEASE</version>
  18. </dependency>
  19. </dependencies>
  20. </project>

9c5520241685532fd73f3973e87d6fa6.png

studeng类:

  1. package org.example;
  2. import org.apache.commons.logging.Log;
  3. import org.apache.commons.logging.LogFactory;
  4. public class Student {
  5. private static final Log LOGGER = LogFactory.getLog(Student.class);
  6. private int id;
  7. private String name;
  8. private Grade grade;
  9. //无参构造方法,在没有其他带参构造方法的情况下,可以省略
  10. public Student() {
  11. }
  12. //id 属性的 setter 方法
  13. public void setId(int id) {
  14. LOGGER.info("正在执行 Student 类的 setId() 方法…… ");
  15. this.id = id;
  16. }
  17. //name 属性的 setter 方法
  18. public void setName(String name) {
  19. LOGGER.info("正在执行 Student 类的 setName() 方法…… ");
  20. this.name = name;
  21. }
  22. public void setGrade(Grade grade) {
  23. LOGGER.info("正在执行 Student 类的 setGrade() 方法…… ");
  24. this.grade = grade;
  25. }
  26. @Override
  27. public String toString() {
  28. return "Student{" +
  29. "id=" + id +
  30. ", name='" + name + '\'' +
  31. ", grade=" + grade +
  32. '}';
  33. }
  34. }

47b8952dfe01bd7df5ab55de1fa8ef79.png

grade类:

  1. package org.example;
  2. import org.apache.commons.logging.Log;
  3. import org.apache.commons.logging.LogFactory;
  4. public class Grade {
  5. private static final Log LOGGER = LogFactory.getLog(Grade.class);
  6. private Integer gradeId;
  7. private String gradeName;
  8. /**
  9. * 无参构造函数
  10. * 若该类中不存在其他的带参构造函数,则这个默认的无参构造函数可以省略
  11. */
  12. public Grade() {
  13. }
  14. public void setGradeId(Integer gradeId) {
  15. LOGGER.info("正在执行 Grade 类的 setGradeId() 方法…… ");
  16. this.gradeId = gradeId;
  17. }
  18. public void setGradeName(String gradeName) {
  19. LOGGER.info("正在执行 Grade 类的 setGradeName() 方法…… ");
  20. this.gradeName = gradeName;
  21. }
  22. @Override
  23. public String toString() {
  24. return "Grade{" +
  25. "gradeId=" + gradeId +
  26. ", gradeName='" + gradeName + '\'' +
  27. '}';
  28. }
  29. }

0f9784e1e9c1c829478d8b878eaf97e4.png

bean.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. https://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <!-- <bean id="helloWorld" class="org.example.HelloWorld">-->
  7. <!-- <property name="message" value="Hello World!——china"/>-->
  8. <!-- </bean>-->
  9. <bean id="student" class="org.example.Student">
  10. <!--使用 property 元素完成属性注入
  11. name: 类中的属性名称,例如 id,name
  12. value: 向属性注入的值 例如 学生的 id 为 1,name 为张三
  13. -->
  14. <property name="id" value="1"></property>
  15. <property name="name" value="张三"></property>
  16. <property name="grade" ref="grade"></property>
  17. </bean>
  18. <bean id="grade" class="org.example.Grade">
  19. <property name="gradeId" value="3"></property>
  20. <property name="gradeName" value="三年级"></property>
  21. </bean>
  22. </beans>

04c049a1acee2e3ad8b74432295cbd86.png

执行:

  1. package org.example;
  2. import org.apache.commons.logging.Log;
  3. import org.apache.commons.logging.LogFactory;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6. public class Main
  7. {
  8. private static final Log LOGGER = LogFactory.getLog(Main.class);
  9. public static void main(String[] args)
  10. {
  11. //获取 ApplicationContext 容器
  12. ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");
  13. //获取名为 student 的 Bean
  14. Student student = context.getBean("student", Student.class);
  15. //通过日志打印学生信息
  16. LOGGER.info(student.toString());
  17. System.out.println(student.toString());
  18. }
  19. }

5b570c473dac67be57876313a9581502.png

执行结果:

f36d3e0df458998e77024d109fc91161.png

发表评论

表情:
评论列表 (有 0 条评论,211人围观)

还没有评论,来说两句吧...

相关阅读