spring——Spring 注入内部Bean——setter 方式注入内部 Bean(转载)

Springboot Bean创建流程、三种Bean注入方式(构造器注入、字段注入setter注入)、循坏依赖问题 构造器注入时会通过构造函数注入所有必须的依赖,当两个组件BeanABeanB之间存在循坏依赖时,执行BeanA的构造函数需要注入BeanB(此时BeanA还未创建),由于BeanB还未生成,因此转而先创建BeanB,执行BeanB的构造函数,而BeanB同样需要注入BeanA,于是出现了死锁情况,两个Bean都无法创建,因此如果使用构造器注入而又出现循环依赖时,循环依赖指的是多个Bean之间互相需要对方作为成员变量,导致依赖链变成了环的状态,如BeanA需要注入BeanB,BeanB需要注入BeanA。 阅读详情

我们将定义在 <bean> 元素的 <property> 或 <constructor-arg> 元素内部的 Bean,称为“内部 Bean”。

 

setter 方式注入内部 Bean

我们可以通过 setter 方式注入内部 Bean。此时,我们只需要在 <bean> 标签下的 <property> 元素中,再次使用 <bean> 元素对内部 Bean 进行定义,格式如下。

注意: 内部 Bean 都是匿名的,不需要指定 id 和 name 的。即使制定了,IoC 容器也不会将它作为区分 Bean 的标识符,反而会无视 Bean 的 Scope 标签。

           因此内部 Bean 几乎总是匿名的,且总会随着外部的 Bean 创建。内部 Bean 是无法被注入到它所在的 Bean 以外的任何其他 Bean 的。

示例

下面我们就通过一个实例,演示下如何使用 setter 方法注入内部 Bean。
1. 参考《第一个 Spring 程序》,新建一个名为 my-spring-demo2 的 Java 项目。
2. 在 net.biancheng.c 包中,创建一个名为 Dept 的类,代码如下。

package net.biancheng.c;

public class Dept {
    //部门编号
    private String deptNo;
    //部门名称
    private String deptName;

    public void setDeptNo(String deptNo) {
        this.deptNo = deptNo;
    }

    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }

    @Override
    public String toString() {
        return "Dept{" +
                "deptNo='" + deptNo + '\'' +
                ", deptName='" + deptName + '\'' +
                '}';
    }
}

3. 在 net.biancheng.c 包下,创建一个名为 Employee 的类,代码如下。

package net.biancheng.c;

public class Employee {
    //员工编号
    private String empNo;
    //员工姓名
    private String empName;
    //部门信息
    private Dept dept;

    public void setEmpNo(String empNo) {
        this.empNo = empNo;
    }

    public void setEmpName(String empName) {
        this.empName = empName;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "empNo='" + empNo + '\'' +
                ", empName='" + empName + '\'' +
                ", dept=" + dept +
                '}';
    }
}

4. 在 src 目录下创建 Spring 配置文件 Beans.xml,配置如下。

5. 在 net.biancheng.c 包下,创建一个名为 MainApp 的类,代码如下。

6. 执行 MainApp 中的 main() 方法,控制台输出如下。

SpringBoot - Lombok使用详解2(@Setter、@Getter、@ToString、@EqualsAndHashCode) 阅读详情

相关推荐

【游戏开发】初识寻路&navmesh,探索RecastDemo

在手游时代,尤其对于大世界游戏而言,寻路的实现基本在专门的寻路服务器上进行。在众多寻路的解决方案中,recastnavigation是最为经典实用的一个,很多游戏甚至游戏引擎都采用似的实现。recastnavigation项目自带了RecastDemo,用图形化的界面帮助用户认识寻路网格(navmesh)的生成以及寻路的过程。因此,作为初学者的笔者,也决定通过RecastDemo去初步认识寻路的机理奥秘。 构建RecastDemo 首先克隆recastnavigation项目,从文档中可以看到Recast

HiKariのTechLab 3013

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

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

小白龙白龙马的博客 903

Attention优化|2w字原理&图解: 从Online-Softmax到FlashAttention V1/V2/V3

本文通过原理分析图解的方式,通俗易懂地FlashAttention系列算法。FlashAttention V1/V2在LLM领域的应用已经非常广泛,相关的论文也反复读了几遍。FA1FA2论文非常经典,都推荐读一下(不过FA2论文中公式错误不少本文大约1.8w字,包括以下内容:0x07 分布式训推使用FlashAttention0x09 FlashAttention中MQA/GQA以及Causal Mask处理。

强化学习曾小健 5168

spring——Spring 注入内部Bean——setter 方式注入内部 Bean

我们将定义在 <bean> 元素的 <property> 或 <constructor-arg> 元素内部Bean,称为“内部 Bean”。 项目依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" ...

小白龙白龙马的博客 808

java 领导_Java简单部门、领导、雇员关系)

public classSwater{public static voidmain(String []args){Print print= newPrint();print.out();}}//打印classPrint{public voidout(){Department dep1= new Department(122,"技术部","开发工程师");//第一个部门Department dep...

weixin_33291684的博客 516

java setter 注入_Spring教程 - Spring Setter注入

Spring教程 - Spring Setter注入Spring Setter注入是最流行简单的依赖注入方法,它将通过setter方法注入依赖关系。在Setter依赖注入中,IoC容器注入一个Java Bean的依赖通过JavaBean风格的setter方法。Java Beansetters公开了IoC容器可以管理的依赖关系。在实践中,Setter注射是最广泛使用的注射机制,它是一个最简单的...

weixin_33277412的博客 480

java department_java题目:创建一个部门Department),要求如下:

展开全部参考代码:classDepartment{privateStringdName;privatestaticDoubledMoney;privateIntegerdPeople;publicDepartment(StringdName,IntegerdPeople){this.dName=dName;this.dPeople=dPeople;}public...

weixin_39965514的博客 883

Spring简单获取bean(属性注入,Setter注入,属性注入)

首先我们要知道什么是对象装配,以及为什么需要对象装配.对象装配: 就是获取bean对象,即把bean对象从Spring中取出,然后放到某个中,这个过程就像注入一个对象,因此也叫做对象注入为什么需要对象装配: 在过去获取bean的方法中,相对上繁琐,因此我们提高一种更简单的方法去获取bean.对象装配的实现方式主要分为,属性注入,Setter注入,构造方法注入.重点需要掌握熟练使用的应该是属性注入,其它俩个注入起码需要了解其优缺点基本使用,

ta_older的博客 2060

Spring Bean几种注入方式——setter(常用),构造器,注入内部Bean注入集合,接口...

依赖注入分为三种方式: 1.1构造器注入     构造器通过构造方法实现,构造方法有无参数都可以。在大部分情况下我们都是通过的构造器来创建对象,Spring也可以采用反射机制通过构造器完成注入,这就是构造器注入的原理。    代码清单:构造器注入 1 package com.spring.chapter3; 2 3 public class Role { 4 5 ...

云源 1341

spring学习(spring-DI(setter注入、构造器注入、自动装配方式))

本篇博客的内容:spring容器(DI)依赖注入的几种实现方式spring容器使用setter注入方式、构造器注入方式、自动装配方式实现(DI)依赖注入(基本介绍与详细操作步骤)......

岁岁岁平安的博客 1573

Spring注入Bean方式

Spring框架提供了多种灵活的Bean注入方式,包括@Autowired@Resource@Inject@Qualifier@Primary@Lazy@Bean@Value注解。这些注解使得依赖注入变得简单直观,同时也支持复杂的场景,如处理多个Bean注入、延迟加载配置属性注入。选择合适的注入方式可以提高代码的可读性、可维护性灵活性。了解这些注入方式的适用场景最佳实践对于开发高效、可扩展的Spring应用至关重要。

2401_85373732的博客 1317

Spring 注入bean的几种方式

Spring框架支持多种方式进行Bean注入,以满足不同场景的需求。@Autowired@Resource以上是一些常见的Spring Bean注入方式,选择适当的方式取决于具体的业务需求设计考虑。构造器注入Setter注入是最常见的两种方式,而其他方式在一些特殊情况下可能更为适用。

tanwu1的博客 2766

Spring】DI(依赖注入)详解:属性注入@Autowired(超详细)、构造方法注入Setter注入

这篇博客深入讲解了Spring框架中的依赖注入(DI)机制,主要内容包括:DI概念与IoC关系​​:DI是实现控制反转(IoC)的核心手段,通过容器主动管理对象依赖,降低耦合。比咖啡店点单,开发者只需声明依赖,无需手动创建。三种注入方式​​:属性注入​​:简洁但依赖容器,不支持final字段。构造方法注入​​:推荐方式,支持final字段且强制依赖初始化,适合强不变性需求。Setter注入​​:灵活性高,但可能被多次调用修改。@Autowired问题与解决​​:同一类型多个Bean时,可通过属性名匹。

Code哈哈笑的博客 5759

Spring三种bean注入方式

Spring中依赖注入有三种注入方式: 一、构造器注入; 二、设值注入setter方式注入); 三、Feild方式注入(注解方式注入)。 一、构造器注入 构造器注入顾名思义就是在程序组件中实现构造器,构造器可以是一个也可以是多个。废话不多说,直接上代码。 package com.fredia.service.impl; import java.util.List; impo...

小猪奋斗 1万+

Day6.继承

继承

qq_57417779的博客 294

springbeansetter/构造注入

我们知道,一般java中的依赖注入有三种:1 属性注入2 settter注入3 构造注入提示:以下是本篇文章正文内容,下面案例可供参考基于setter构造注入得到的bean,其实也是spring中的,但是我将它存了一个静态变量副本,然后直接使用了~~

学海无涯,我用JAVA 1047

Spring中的注入方式

Spring中的注入方式 Spring中有几种注入方式 字段注入 构造注入 setter方法注入 字段注入 字段注入是平时开发中最常使用的注入方式,因为简单方便,可读性强。但是Spring官方不建议我们使用这种注入方式,在IDEA中使用字段注入时会给出黄牌警告。如下代码所示: package com.wxw.controller; import com.wxw.service.IUserService; import org.springframework.beans.factory.annotati

it_wxw的博客 1726

重写spring bean的几种方式

概述 工作中会经常会需要重写jar包中的一个,开源的jar包或者是其他项目提供的share包,比较通用的做法是下载源码下来,修改后重新打包。但是很多时候我们只是重写一个,下载源码打包太过繁琐,而且有可能别人的share没有提供源码下载。 可以通过下面几种方式重写: 1、直接同包路径,同报名,进行替换 这种方式简单粗暴,前提必须是同包路径,同名。可以直接覆盖掉jar包中的spring项目会...

程序员阿康 7763

Spring Setter 注入教程

Spring Setter 注入在这个例子中我们将学习怎样通过setter注入来设置一个bean的属性。我们首先来看一个User bean。 package com.vaannila; public class User { private String name; private int age; private

kimlunarove的专栏 1884

spring set方式注入bean

平常的java开发中,程序员在某个中需要依赖其它的方法,则通常是new一个依赖再调用实例的方法,这种开发存在的问题是new的实例不好统一管理,spring提出了依赖注入的思想,即依赖不由程序员实例化,而是通过spring容器帮我们new指定实例并且将实例注入到需要该对象的中。依赖注入的另一种说法是“控制反转”,通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员,而控制

javaEE的专栏 2027

1995-2022年全国及各省单位GDP能耗数据(含原始数据+计算过程+结果)

1995-2022年全国及各省单位GDP能耗数据(含原始数据+计算过程+结果)1、时间:1995-2022年2、范围:全国及30省市不含西藏3、来源:能源统计NJ、各省NJ、国家统计J4、指标: 能源消费总量、国内生产总值、单位GDP能耗5、缺失情况:内蒙古、福建新疆2022年缺失,其中湖南2020、2021、2022年根据能源消费总量增速计算,其余省份均无缺失6、计算说明:单位 GDP 能耗由能源消费总量国内(地区)生产总值这两个指标计算而得。单位GDP能耗(吨标煤/万元)=能源消费总量(吨标煤)/国内生产总值(万元)

上一篇: spring——Spring Bean属性注入——短命名空间注入——c 命名空间注入(转载)
下一篇: spring——Spring 注入内部Bean——构造函数方式注入内部 Bean(转载)
小白龙白龙马
博客等级 码龄5年 557粉丝 2023原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值