二、Spring-Bean的自动装配

2023-05-16

Bean的自动装配定义:在Spring配置文件不需要配置JavaBean之间的依赖关系,如 property、constructor-arg

  • Spring IOC容器可以在上下文中自动寻找,实现自动装配Bean。
  • 在Spring中有三种装配方式:xml中配置、java中配置、隐式的自动装配(重要)

1.创建实体类

三个实体类:Goods(商品)、Providers(供应商)、Brands(品牌)

package com.yy.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
    private String goodID;
    private String goodName;
    private String goodType;
    //品牌
    private Brands brand;
    private BigDecimal cost;
    //供应商
    private Providers provider;

    public Goods(String goodID, String goodName) {
        this.goodID = goodID;
        this.goodName = goodName;
    }
}
package com.yy.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Providers {
    private String providerID;
    private String providerName;
    private String address;
    private String tel;
}
package com.yy.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Brands {
    private String brandID;
    private String brandName;
}

2.创建Bean.xml

在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="provider" class="com.yy.pojo.Providers">
        <property name="address" value="zj"></property>
        <property name="providerID" value="p001"></property>
        <property name="providerName" value="小h"/>
        <property name="tel" value="13812355581"/>
    </bean>
    <bean id="brand" class="com.yy.pojo.Brands">
        <property name="brandID" value="b001"/>
        <property name="brandName" value="sevenRB"/>
    </bean>
    <bean id="goods" class="com.yy.pojo.Goods">
        <property name="goodID" value="z001"/>
        <property name="goodName" value="主板"/>
        <property name="cost" value="2000"/>
        <property name="goodType" value="硬件"/>
        <property name="brand" ref="brand"/>
        <property name="provider" ref="provider"/>
    </bean>

</beans>

3.测试类

import com.yy.pojo.Goods;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BeanTest {
    @Test
    public void myTest(){
        ApplicationContext context = new ClassPathXmlApplicationContext("AplicationContext.xml") ;
        Goods goods = context.getBean("goods", Goods.class);
        System.out.println(goods);
    }
}
  • 通过ByName自动装配。
    ByName会自动在容器中上下文查找和自己对象的set方法后面的值对应的Bean的id,但需保证id是唯一的。
<bean id="goods" class="com.yy.pojo.Goods" autowire="byName">
        <property name="goodID" value="z001"/>
        <property name="goodName" value="主板"/>
        <property name="cost" value="2000"/>
        <property name="goodType" value="硬件"/>
    </bean>
  • 通过ByType自动装配。
    ByType会自动在容器中上下文查找和自己对象属性类型相对应的Bean,但必须保证这个类型Class全局唯一。
<bean id="goods" class="com.yy.pojo.Goods" autowire="byType">
    </bean>
  • 使用注解自动装配
    1.导入约束
    2.配置注解的支持context:annotation-config
<beans 
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
	context:annotation-config /> //或者<component-scan />
</beans>

3.@Autowired
直接在属性或者Set方法上使用。

package com.yy.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;

import java.math.BigDecimal;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Goods {
    private String goodID;
    private String goodName;
    private String goodType;
    //品牌
    @Autowired
    private Brands brand;
    private BigDecimal cost;
    //供应商
    //设置requiredw为false,则表示对象可以为null
    @Autowired(required = false)
    private Providers provider;

    public Goods(String goodID, String goodName) {
        this.goodID = goodID;
        this.goodName = goodName;
    }
}

通过@Qualifier(value="")注解可以配置@Autowired指定一个唯一的bean对象注入
@Resource注解同样可以实现,Java的原生注解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二、Spring-Bean的自动装配 的相关文章

随机推荐

  • java并发-生产者消费者模式

    java并发总结三 实现线程间通信的几种方法 Object wait notifyAll span class token keyword package span concurrent span class token punctuati
  • linux上安装vscode-下载tar.gz

    1下载文件 这里推荐下载tar gz 文件 https span class token punctuation span span class token operator span code span class token punct
  • Cellranger故障排除

    Cellranger 运行不久 xff0c 即出现 runtime failed ID SC RNA COUNTER CS SC RNA COUNTER CHEMISTRY DETECTOR DETECT CHEMISTRY 然后终止 考虑
  • Duende.IdentityServer——快速开始

    一 新建鉴权中心服务 1 安装Duende IdentityServer模板 打开命令行工具 xff0c 输入以下命令 xff08 若已安装 xff0c 直接跳过 xff09 dotnet new install Duende Identi
  • Duende.IdentityServer——添加认证策略

    上一章我们已经获取到了token xff0c 本文我们对webApi添加认证策略 1 修改HostingExtensions cs中的ConfigureServices方法 添加如下代码 span class token comment 添
  • vmware中linux使用gparted调整磁盘大小并设置swap分区

    vmware中linux使用gparted调整磁盘大小并设置swap分区 今天使用虚拟机的时候 xff0c 发现虚拟机快满了 xff0c 提示磁盘空间小 xff0c 不得不扩充虚拟机空间 1首先把vmware中的ubuntu关机 xff0c
  • Gnome安装及个性化设置

    最近尝试了一下gnome桌面管理系统 xff0c 感觉还不错 xff0c 我的桌面我做主 先上图 xff1a 接下来 xff0c 详细说一下安装的过程 1 首先是在unity界面下通过命令行安装配置gnome sudo apt get in
  • 异常的处理

    Java异常处理的五个关键字 xff1a try catch finally throw throws 2 1 抛出异常throw 在编写程序时 xff0c 我们必须要考虑程序出现问题的情况 比如 xff0c 在定义方法时 xff0c 方法
  • 如何解决version `GLIBCXX_3.4.29‘ not found的问题

    首先 xff0c 运行时出现的问题如下 xff1a ImportError lib x86 64 linux gnu libstdc 43 43 so 6 version 96 GLIBCXX 3 4 29 39 not found req
  • Android EditText 手机号344格式化输入的最佳实现

    PhoneTextWatcher 手机号格式化监听器 xff0c 支持普通输入 删除 xff0c 中间输入 删除 xff0c 在任意位置下黏贴 剪贴多个数字等多种交互场景 目前支持的手机号格式为 3 4 4 分隔符可以自定义 Preview
  • JDispatcher-高效的 Android 组件生命周期分发框架

    JDispatcher Android 组件生命周期分发框架 xff0c 适用于组件化 xff0c 模块化 xff0c 启动优化等场景 Github JDispatcher 功能介绍 实现 Application 各个生命周期方法在所有需要
  • Kotlin | 委托(Delegation )详解

    本文要点概述 辨析委托模式与代理模式 接口委托 Delegated interface 属性委托 Delegated properties 映射委托 Map delegation 延迟属性 lazy properties 非空属性 Dele
  • node 和 npm 源码编译安装

    本文出处 xff1a www 678fly cn node 和 npm 源码编译安装 下载源码压缩包 xff1a http nodejs cn download 解压文件并将文件迁移到 usr local 下 span class toke
  • Outlook2013/2016中的Gmail设置

    Outlook2013 2016中的Gmail设置 注意 xff1a 用户名 xff1a useer 64 gmail com 全称 不要选中 使用安全密码验证 SPA 进行登录 复选框 除非 Gmail 指定 xff0c 否则所有服务器和
  • C#“System.Threading.ThreadStateException”类型的未经处理的异常

    备忘 最近做一个功能 xff0c 从主界面进入另一个界面时 xff0c 数据量较大 xff0c 处理信息较多 xff0c 程序宕机 而且点击程序还会提示程序无响应 不得已用另一个线程显示界面 但在界面中使用控件时 xff0c 报错 xff1
  • 数据主题域划分

    作用 xff1a 对公司所有的业务过程进行归纳汇总后 xff0c 总结出公司所有的主题域 xff0c 并且也能清晰的知道公司的所有业务模块有助于建模人员和运营人员对公司业务情况有基本的了解有利于在进行模型设计时 xff0c 根据主题域和业务
  • Mybatis入门第一例

    实现步骤 创建表User xff08 userID userPass userType xff09 span class token keyword create span span class token keyword table sp
  • Idea快捷键笔记(Mac OS)

    个人常用 快捷键menucommand shift 43 代码全部展开command shift 代码全部折叠command 单行注释command shift 代码块注释command option L格式化代码option enter自
  • log4j一般配置log4j.properties

    log4j rootLogger 61 DEBUG console file log4j appender console 61 org apache log4j ConsoleAppender log4j appender console
  • 二、Spring-Bean的自动装配

    Bean的自动装配定义 xff1a 在Spring配置文件不需要配置JavaBean之间的依赖关系 xff0c 如 property constructor arg Spring IOC容器可以在上下文中自动寻找 xff0c 实现自动装配B