所谓 Bean 属性注入,简单点说就是将属性注入到 Bean 中的过程,而这属性既可以普通属性,也可以是一个对象(Bean)。
Spring 主要通过以下 2 种方式实现属性注入:
- 构造函数注入
- setter 注入(又称设值注入)
构造函数注入
我们可以通过 Bean 的带参构造函数,以实现 Bean 的属性注入。
使用构造函数实现属性注入大致步骤如下:
- 在 Bean 中添加一个有参构造函数,构造函数内的每一个参数代表一个需要注入的属性;
- 在 Spring 的 XML 配置文件中,通过 <beans> 及其子元素 <bean> 对 Bean 进行定义;
- 在 <bean> 元素内使用 <constructor-arg> 元素,对构造函数内的属性进行赋值,Bean 的构造函数内有多少参数,就需要使用多少个 <constructor-arg> 元素。
项目依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>ssw</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.2.5.RELEASE</version> </dependency> </dependencies> </project>
创建student类:
package org.example; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class Student { private static final Log LOGGER = LogFactory.getLog(Student.class); private int id; private String name; private Grade grade; public Student(int id, String name, Grade grade) { LOGGER.info("正在执行 Course 的有参构造方法,参数分别为:id=" + id + ",name=" + name + ",grade=" + grade); this.id = id; this.name = name; this.grade = grade; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", grade=" + grade + '}'; } }
创建grade类:
package org.example; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class Grade { private static final Log LOGGER = LogFactory.getLog(Grade.class); private Integer gradeId; private String gradeName; public Grade(Integer gradeId, String gradeName) { LOGGER.info("正在执行 Course 的有参构造方法,参数分别为:gradeId=" + gradeId + ",gradeName=" + gradeName); this.gradeId = gradeId; this.gradeName = gradeName; } @Override public String toString() { return "Grade{" + "gradeId=" + gradeId + ", gradeName='" + gradeName + '\'' + '}'; } }
创建bean:
<?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 https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- <bean id="helloWorld" class="org.example.HelloWorld">--> <!-- <property name="message" value="Hello World!——china"/>--> <!-- </bean>--> <bean id="student" class="org.example.Student"> <constructor-arg name="id" value="2"></constructor-arg> <constructor-arg name="name" value="李四"></constructor-arg> <constructor-arg name="grade" ref="grade"></constructor-arg> </bean> <bean id="grade" class="org.example.Grade"> <constructor-arg name="gradeId" value="4"></constructor-arg> <constructor-arg name="gradeName" value="四年级"></constructor-arg> </bean> </beans>
执行:
package org.example; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { private static final Log LOGGER = LogFactory.getLog(Main.class); public static void main(String[] args) { //获取 ApplicationContext 容器 ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); //获取名为 student 的 Bean Student student = context.getBean("student", Student.class); //通过日志打印学生信息 LOGGER.info(student.toString()); System.out.println(student.toString()); } }
执行结果:
标签:name,grade,spring,Bean,gradeId,org,构造函数,注入 From: https://www.cnblogs.com/xiaobaibailongma/p/16971674.html