依赖注入的本质是装配,装配是依赖注入的具体行为

1.测试环境搭建
public class Cat {
public void bark(){
System.out.println("miao...");
}
}
public class Dog {
public void bark(){
System.out.println("wang...");
}
}
public class People {
Cat cat;
Dog dog; public Cat getCat() {
return cat;
} public void setCat(Cat cat) {
this.cat = cat;
} public Dog getDog() {
return dog;
} public void setDog(Dog dog) {
this.dog = dog;
}
}
2.byName:会自动在容器上下文中,通过set方法中的参数名去查找相同id的<bean>
<bean id="dog" class="com.guan.bean.Dog"></bean>
<bean id="cat" class="com.guan.bean.Cat"></bean> <bean id="people" class="com.guan.bean.People" autowire="byName"></bean>
3.byType:会自动在容器上下文中,通过自己对象属性类型相同的bean
<bean id="dog" class="com.guan.bean.Dog"></bean>
<bean id="cat" class="com.guan.bean.Cat"></bean> <bean id="people" class="com.guan.bean.People" autowire="byType"></bean>

注意

  • byName需要保证<bean>的id唯一
  • byType需要保证<bean>的type唯一
4.使用注解实现自动装配

使用:

  1. 导入约束

  2. 配置注解的支持

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    https://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    https://www.springframework.org/schema/context/spring-context.xsd"> <context:annotation-config/> </beans>

常用注解:

  1. @Autowired:需要配置spring,直接在属性上使用.先使用byType,再使用byName?

    required(default true):默认不需Null

    public class People {
    @Autowired
    Cat cat;
    @Autowired
    Dog dog;
    }

    @Qualifier:当属性名和容器中<bean>中的id不同时,可以通过该注解为属性"起别名"

    public class People {
    @Autowired
    @Qualifier("cat12")
    Cat cat;
    @Autowired
    Dog dog;
    }
  2. @Resource:jdk注解

    name:用于起别名

区别:

  1. 实现方式:

    (1).@Autoword先通过byType实现,如果有重复再通过byName,而且默认要求对象存在

    表现:同一个类型,不同名称,<bean id="dog123" class="com.guan.bean.Dog"></bean>,可以匹配;同一个名称,类型不匹配时,<bean id="dog" class="com.guan.bean.Cat"></bean>,如果只要一个对应的类型可以自动匹配,如果有多个对应的类型会报错

    (2).@Resource默认通过byName实现,如果找不到name,才通过byType,否则报错

    表现:如果有一个同名的不同类型<bean id="cat" class="com.guan.bean.Dog"></bean>,会直接报错对应的类型不匹配;如果有一个同类型的,但是不同名的,可以匹配;如果有多个同类型且不同名,无法匹配

总结:实际上xml文件中一般存放的核心配置文件,一般的配置可以用其它方式

Spring——自动装配的三种实现方式的更多相关文章

  1. spring自动注入的三种方式

    所谓spring自动注入,是指容器中的一个组件中需要用到另一个组件(例如聚合关系)时,依靠spring容器创建对象,而不是手动创建,主要有三种方式: 1. @Autowired注解——由spring提 ...

  2. Spring管理Bean的三种创建方式

    1.使用类构造器实例化  (90%以上都是使用这种) <bean id=“orderService" class="cn.itcast.OrderServiceBean&qu ...

  3. Spring依赖注入的三种方式

    看过几篇关于Spring依赖注入的文章,自己简单总结了一下,大概有三种方式: 1.自动装配 通过配置applicationContext.xml中的标签的default-autowire属性,或者标签 ...

  4. Spring IOC以及三种注入方式

    IOC是spring的最基础部分,也是核心模块,Spring的其他组件模块和应用开发都是以它为基础的.IOC把spring的面向接口编程和松耦合的思想体现的淋漓尽致. IOC概念 IOC(Invers ...

  5. Spring 使用AspectJ的三种方式

    Spring 使用AspectJ 的三种方式 一,使用JavaConfig 二,使用注解隐式配置 三,使用XML 配置 背景知识: 注意 使用AspectJ 的 时候 要导入相应的Jar 包 嗯 昨天 ...

  6. Spring IOC 中三种注入方式

    项目错误知识点记录 正文 最近在项目的时候,用到Spring框架,Spring框架提供了一种IOC的自动注入功能,可以很轻松的帮助我们创建一个Bean,这样就省的我们四处写new Object()这样 ...

  7. Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有 ...

  8. spring Bean的三种配置方式

    Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java Config 添加spring的maven repository <dependency> ...

  9. spring注解之@Import注解的三种使用方式

    目录 1.@Import注解须知 2.@Import的三种用法 3.@Import注解的三种使用方式总结 @ 1.@Import注解须知 1.@Import只能用在类上 ,@Import通过快速导入的 ...

随机推荐

  1. Aselenium前言

    https://seleniumhq.github.io/docs/index.html https://www.seleniumhq.org/ THE SELENIUM BROWSER AUTOMA ...

  2. C++职工管理系统

    目录 职工管理系统 一. 需求 二. 创建管理类 1.创建文件 2. 头文件实现 3. 源文件实现 三. 菜单功能 1. 添加成员函数 2. 功能实现 3. 测试菜单功能 四. 退出功能 1. 提供功 ...

  3. Solution -「USACO 2020.12 P」Sleeping Cows

    \(\mathcal{Description}\)   Link.   有 \(n\) 个牛棚,大小为 \(t_{1..n}\),\(n\) 头奶牛,大小为 \(s_{1..n}\),奶牛只能住进不小 ...

  4. 我来教你如何用Docker部署最近火爆的人生重开模拟器

    文章目录 获取项目源码包 Dockerfile 构建docker镜像 启动docerk容器 访问liferestart 如果人生可以重来... <可惜没如果> github项目地址:htt ...

  5. MySQL架构原理之运行机制

    所谓运行机制即MySQL内部就如生产车间如何进行生产的.如下图: 1.建立连接,通过客户端/服务器通信协议与MySQL建立连接.MySQL客户端与服务端的通信方式是"半双工".对于 ...

  6. MCU与MPU的基本区别

    MCU与MPU的基本区别 题记:一般来说,mpu的价格是mcu的数倍. 参考资料: http://www.elecfans.com/d/1564656.html https://zhuanlan.zh ...

  7. Eclipse插件开发demo

    一.安装 1. 下载安装JDk 2. 下载安装PDE(Plugin-in Development Environment) 访问eclipse官网,点击Download,选择Download Pack ...

  8. Renix签名字段详解——网络测试仪实操

    一.签名字段简介 在添加/修改流量时,会有一个签名字段选项 (1)勾选以后,RENIX软件在发流时,会把每个报文的Payload(净荷)的最后18字节修改为特殊的值,用来统计流的时延.丢包等内容 (2 ...

  9. Excel真的是三维地图可视化制作最好的选择吗?

    随着数据在当下互联网快速发展下变的维度更广,数量更大.结构越来越复杂,人们想要更加清晰,快速的认知和理解一份数据,传统的二维平面图表已经不能满足需求,三维可视化技术越结合多媒体技术.网络技术以及三维镜 ...

  10. Vue 源码解读(8)—— 编译器 之 解析(下)

    特殊说明 由于文章篇幅限制,所以将 Vue 源码解读(8)-- 编译器 之 解析 拆成了两篇文章,本篇是对 Vue 源码解读(8)-- 编译器 之 解析(上) 的一个补充,所以在阅读时请同时打开 Vu ...