Spring:bean注入--Set方法注入

目录
  • Set 方法注入
  • 总结

Set 方法注入

1.新建一个空的 maven项目。

2.导入依赖

properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!--这里是java 版本号-->
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
        <!--这里是方便版本控制-->
        <spring.version>5.3.1</spring.version>
        <lombok.version>1.18.20</lombok.version>
        <junit.version>4.12</junit.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>${junit.version}</version>
    </dependency>
</dependencies>

3.工程项目结构

4.新建包 com.crush.pojo

5.新建Java类Student

@Data // set、get 方法
@AllArgsConstructor // 全参构造
@NoArgsConstructor  // 无参构造
public class Student {
    /**
     * 学号
     */
    private Long number;
    /**
     * 学生姓名
     */
    private String name;
    /**
     * 所在学校
     */
    private String school;
}

resource 下 beans.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 http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--第一种方式 set 方式注入
        1、有set方法才可以注入
        2、默认是单例模式 singleton
        -->
    <bean id="student" class="com.crush.pojo.Student" scope="singleton">
        <!--值可以跟在在标签后面 也可以 写在标签内部-->
        <property name="number">
            <value>1</value>
        </property>
        <property name="name" value="wyh"/>
        <property name="school" value="hngy"/>
    </bean>
        <!--这个id 就是 applicationContext.getBean("【bean-id】", Student.class);
        此处id 大多数时候命名规则就是 类名的第一个字母改为小写
        class:Student
        bean id一般就为: student
     -->
    <bean id="ssss" class="com.crush.pojo.Student" scope="singleton">
        <!--值可以跟在在标签后面 也可以 写在标签内部-->
        <property name="number">
            <value>1</value>
        </property>
        <property name="name" value="wyh"/>
        <property name="school" value="hngy"/>
    </bean>
</beans>

写一个测试类

public class Test {

    /**
     * 通过 ClassPathXmlApplicationContext 获取 Spring 应用程序的 上下文 ApplicationContext
     */
    @org.junit.Test
    public void test(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
        // 第一种方式 获取ioc 容器中的Student 强制类型转换
        Student student = (Student) applicationContext.getBean("student");
        // 第二种方式 直接在后面写明类的标签。
        Student student1 = applicationContext.getBean("student", Student.class);
        // student.setName("cccc"); 给其中一个修改 就会全部修改 可以自己打开测试下
        System.out.println(student);
        System.out.println(student1);
        // 这里结果为true
        // 解释:因为Spring 默认构造出来的对象 默认是单例的。 无论获取多少次 ,都是单例的。
        System.out.println(student==student1);
    }
        /**
     * 通过 FileSystemXmlApplicationContext 获取 Spring 应用程序的 上下文 ApplicationContext
     * 还有第三种是 通过Web服务器实例化 ApplicationContext 容器
     */
    @org.junit.Test
    public void test2(){
        //这里的路径 也可以 用绝对路径
        ApplicationContext applicationContext = new FileSystemXmlApplicationContext("src\\main\\resources\\beans.xml");
        Student student = applicationContext.getBean("student", Student.class);
        System.out.println(student);
    }
}

小小思考

为什么 new ClassPathXmlApplicationContext(“beans.xml”); 要用ApplicationContext 来接收,而不用ClassPathXmlApplicationContext 接收呢?

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");

解释:

按照面向接口编程的思想,声明变量应该是接口类型的,然后创建一个该接口的实现类的实例赋值给该变量。 ApplicationContext是接口,ClassPathXmlApplicationContext是它的一个实现类。所以你就看到了 ApplicationContext ac = new ClassPathXmlApplicationContext(…)

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 详解Spring bean的注解注入之@Autowired的原理及使用

    一.@Autowired 概念: @Autowired 注释,它可以对类成员变量.方法及构造函数进行标注,完成自动装配的工作. 通过 @Autowired的使用来消除 set ,get方法. 在使用@Autowired之前,我们对一个bean配置起属性时,用的是 <property name="属性名" value=" 属性值"/> 使用@Autowired之后,我们只需要在需要使用的地方使用一个@Autowired 就可以了. 代码使用: public

  • springboot2.x解决运行顺序及Bean对象注入顺序的问题

    1 前言 通过指定接口,重写指定方法,可以在Bean对应的生命周期方法中执行相应的程序 2 测试 本文将分析几个Bean对象,为它们设置优先级(通过@Order),然后再打断点调试,测试各种生命周期方法的运行的顺序 在项目当中最让人头疼的就是bean对象不被注入的问题,通过本文,你可以很好的解决这个问题. 先看看本程序使用的依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="

  • Spring bean为什么需要依赖注入

    目录 具体步骤: 样例1: 样例2: Spring单例模式和原型模式 一.单例模式 二.原型模式 思考 为什么需要依赖注入 总结 具体步骤: 1.创建一个maven项目 spring-day1-constructor 2.导入依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--这里是java 版本号--> <maven.compil

  • Spring Bean的实例化之属性注入源码剖析过程

    前言 这一章节我们来讨论创建Bean过程中的属性注入,在Spring的IOC容器启动过程中,会把定义的Bean封装成BeanDefinition注册到一个ConcurrentHashMap中,Bean注册完成后,就会对单利的且lazy-init=false 的Bean进行实例化.创建Bean的代码在 AbstractAutowireCapableBeanFactory#doCreateBean 中,当Bean创建成功之后,会调用AbstractAutowireCapableBeanFactory

  • 普通类注入不进spring bean的解决方法

    解决问题:我在做移动端accessToken的使用遇到一个问题,就是普通类死活注入不进去spring bean,我和同事雷杰通过各种注解,xml配置搞了好久都搞不定,这里插个眼,有空补一下spring,得深入研究一下 解决办法:后面通过一个spring工具类搞定,这里贴上代码 1.引入这个springUtil类 2.通过构造方法注入 贴上SpringUtils代码: package com.dt.base.weixin.util; import org.springframework.aop.f

  • Spring:bean注入--Set方法注入

    目录 Set 方法注入 总结 Set 方法注入 1.新建一个空的 maven项目. 2.导入依赖 properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!--这里是java 版本号--> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target

  • 深入理解Spring中的Lookup(方法注入)

    前言 本文主要给大家介绍了关于Spring中Lookup(方法注入)的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 在使用Spring时,可能会遇到这种情况:一个单例的Bean依赖另一个非单例的Bean.如果简单的使用自动装配来注入依赖,就可能会出现一些问题,如下所示: 单例的Class A @Component public class ClassA { @Autowired private ClassB classB; public void printClass

  • 详解PHP的Yii框架中组件行为的属性注入和方法注入

    行为的属性和方法注入原理 上面我们了解到了行为的用意在于将自身的属性和方法注入给所依附的类. 那么Yii中是如何将一个行为 yii\base\Behavior 的属性和方法, 注入到一个 yii\base\Component 中的呢? 对于属性而言,是通过 __get() 和 __set() 魔术方法来实现的. 对于方法,是通过 __call() 方法. 属性的注入 以读取为例,如果访问 $Component->property1 ,Yii在幕后干了些什么呢? 这个看看 yii\base\Com

  • 关于spring boot中几种注入方法的一些个人看法

    前言 最近在知乎上面看到一篇关于程序员面试的问题,面试官问我们一般有几种注入的方法,这几种注入的方法分别在什么时候运用比合理,当时我看到这个时候懵逼了,由于我自己也是刚刚接触springboot不久,所以就自己在平时运用的上面总结了一些知识点常用的几种springboot的注入方法,由于我是一个小萌新,所只要是能够起道注入的方法的注解我都列出来,有可能会有错,希望大家能够及时提出来我来解决: @Autowired @Resource @Component @Configuration @Qual

  • 全面详解Spring Bean生命周期教程示例

    目录 Spring 中 Bean 的生命周期 Bean 的实例化 构造方法注入 工厂方法注入 Bean 的属性赋值 setter注入 构造方法注入 Bean 的初始化 初始化方法 InitializingBean 接口 Bean 的销毁 销毁方法 DisposableBean 接口 总结 Spring 中 Bean 的生命周期 是当今最流行的 Java 开发框架之一,其强大的 Bean容器机制是其中的核心之一.Bean 是指在 Spring 容器中被管理的对象,它们可以被注入到其他对象中,也可以

  • Spring中bean集合注入的方法详解

    目录 Map注入 List注入 Set注入 数组注入 应用 哈喽大家好啊,我是Hydra. Spring作为项目中不可缺少的底层框架,提供的最基础的功能就是bean的管理了.bean的注入相信大家都比较熟悉了,但是有几种不太常用到的集合注入方式,可能有的同学会不太了解,今天我们就通过实例看看它的使用. 首先,声明一个接口: public interface UserDao { String getName(); } 然后定义两个类来分别实现这个接口,并通过@Component注解把bean放入s

  • Spring Bean注册与注入实现方法详解

    目录 1. 逻辑上的 Bean 注册 2. XML 注册 Bean 到自建的库中 2.1 工厂方法 2.2 使用工厂方法和实例化工厂注册 Bean 3. XML 配合注解进行 Bean 注册 4. 使用注解注册 Bean 4.1 注解方式注册的必要条件 4.2 用到的注解 4.3 @Component注解注入 4.4 使用 @Bean 注解注册 5. 通过注解注入 Bean 6. 注入时的一个坑点 7. 获取 库中的对象 上接[Spring]spring核心思想——IOC和DI 上篇文章结尾简单

  • JSP开发之Spring方法注入之替换方法实现

    JSP开发之Spring方法注入之替换方法实现 Spring提供了一种替换方法实现的机制,可以让我们改变某个bean某方法的实现.打个比方我们有一个bean,其中拥有一个add()方法可以用来计算两个整数的和,但这个时候我们想把它的实现逻辑改为如果两个整数的值相同则把它们相乘,否则还是把它们相加,在不改变或者是不能改变源码的情况下我们就可以通过Spring提供的替换方法实现机制来实现这一要求. 替换方法实现机制的核心是MethodReplacer接口,其中定义了一个reimplement ()方

随机推荐