首页 > 其他分享 >spring——Spring Bean属性注入——setter 注入

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

时间:2022-12-10 16:14:20浏览次数:27  
标签:spring Bean Student import org LOGGER public 注入

setter 注入

我们可以通过 Bean 的 setter 方法,将属性值注入到 Bean 的属性中。

在 Spring 实例化 Bean 的过程中,IoC 容器首先会调用默认的构造方法(无参构造方法)实例化 Bean(Java 对象),然后通过 Java 的反射机制调用这个 Bean 的 setXxx() 方法,将属性值注入到 Bean 中。

使用 setter 注入的方式进行属性注入,大致步骤如下:

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

 

 

 

 

项目依赖:

<?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>

 

 

 

 

 

 

 

 

 

 

 

studeng类:

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() {
    }
    //id 属性的 setter 方法
    public void setId(int id) {
        LOGGER.info("正在执行 Student 类的 setId() 方法…… ");
        this.id = id;
    }
    //name 属性的 setter 方法
    public void setName(String name) {
        LOGGER.info("正在执行 Student 类的 setName() 方法…… ");
        this.name = name;
    }
    public void setGrade(Grade grade) {
        LOGGER.info("正在执行 Student 类的 setGrade() 方法…… ");
        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() {
    }
    public void setGradeId(Integer gradeId) {
        LOGGER.info("正在执行 Grade 类的 setGradeId() 方法…… ");
        this.gradeId = gradeId;
    }
    public void setGradeName(String gradeName) {
        LOGGER.info("正在执行 Grade 类的 setGradeName() 方法…… ");
        this.gradeName = gradeName;
    }
    @Override
    public String toString() {
        return "Grade{" +
                "gradeId=" + gradeId +
                ", gradeName='" + gradeName + '\'' +
                '}';
    }
}

 

 

 

 

 

 

 

 

 

 

bean.xml:

<?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">
        <!--使用 property 元素完成属性注入
            name: 类中的属性名称,例如 id,name
            value: 向属性注入的值 例如 学生的 id 为 1,name 为张三
        -->
        <property name="id" value="1"></property>
        <property name="name" value="张三"></property>
        <property name="grade" ref="grade"></property>
    </bean>
    <bean id="grade" class="org.example.Grade">
        <property name="gradeId" value="3"></property>
        <property name="gradeName" value="三年级"></property>
    </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());

    }

}

 

 

 

 

 

 

 

 

 

执行结果:

 

标签:spring,Bean,Student,import,org,LOGGER,public,注入
From: https://www.cnblogs.com/xiaobaibailongma/p/16971737.html

相关文章

  • 基于springboot多数据源的启动器
    一、简述dynamic-datasource-spring-boot-starter是一个基于springboot的快速集成多数据源的启动器。其支持 Jdk1.7+,SpringBoot1.4.x1.5.x2.x.x。二、准备数据多数......
  • SpringBoot3.x中spring.factories功能被移除的解决方案
    背景笔者所在项目组在搭建一个全新项目的时候选用了​​SpringBoot3.x​​​,项目中应用了很多​​SpringBoot2.x​​​时代相关的第三方组件例如​​baomidou​​​出品的​......
  • spring——Spring Bean属性注入——构造函数注入
    所谓Bean属性注入,简单点说就是将属性注入到Bean中的过程,而这属性既可以普通属性,也可以是一个对象(Bean)。Spring主要通过以下2种方式实现属性注入:构造函数注入sett......
  • spring——控制反转(IoC)—— 与 ——依赖注入(DI)
    控制反转(IoC)  在传统的Java应用中,一个类想要调用另一个类中的属性或方法,通常会先在其代码中通过newObject()的方式将后者的对象创建出来,然后才能实现属性或方法......
  • spring——Spring Bean定义
          在XML配置的<beans>元素中可以包含多个属性或子元素,常用的属性或子元素如下表所示。属性名称描述idBean的唯一标识符,SpringIoC容器对Bean......
  • SpringBoot内置tomcat启动过程及原理
    作者:李岩科1背景SpringBoot是一个框架,一种全新的编程规范,他的产生简化了框架的使用,同时也提供了很多便捷的功能,比如内置tomcat就是其中一项,他让我们省去了搭建tomca......
  • spring——第一个spring案例
    Spring是什么(理解) Spring是分层的JavaSE/EE应用full-stack轻量级开源框架,以IoC(InverseOfControl:反转控制)和AOP(AspectOrientedProgramming:面向切面编程)为内核......
  • springcloud Config 分布式配置中心
     Server端:提供配置⽂件的存储、以接⼝的形式将配置⽂件的内容提供出去,通过使⽤@EnableConfigServer注解在Springboot应⽤中⾮常简单的嵌⼊Client端:通过接⼝获取配置数据......
  • springcloud Stream消息驱动
    SpringCloudStream是⼀个构建消息驱动微服务的框架。应⽤程序通过inputs(相当于消息消费者consumer)或者outputs(相当于消息⽣产者producer)来与SpringCloudStream中的bind......
  • springcloud Sleuth 链路追踪
    1.分布式链路追踪技术核⼼思想下图描述了⼀个常⻅的调⽤场景,⼀个请求通过⽹关服务路由到下游的微服务-1,然后微服务-1调⽤微服务-2,拿到结果后再调⽤微服务-3,最后组合微服务-......