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

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. MySQL数据库授权与索引

    MySQL数据库授权与索引 目录 MySQL数据库授权与索引 一.数据库用户授权 1. 授予权限 2. 查看权限 3. 删除权限 4. 全部权限(all privileges) 二.MySQL索引 1 ...

  2. 2022寒假集训day4

    day4(day5补完的) 继续刷搜索方面的题, 初步了解了序列. T1 迷宫问题 题目描述设有一个 n*n 方格的迷宫,入口和出口分别在左上角和右上角.迷宫格子中分别放 0 和 1 ,0 表示可通, ...

  3. 框架5--nginx安装部署 下(web服务)

    目录 1.提纲 2.Nginx虚拟主机 3.Nginx日志 4.Nginx访问控制模块 5.Nginx状态监控模块 6.访问连接控制模块 框架5--nginx安装部署 下(web服务) 1.提纲 1. ...

  4. Solution -「CF 1622F」Quadratic Set

    \(\mathscr{Description}\)   Link.   求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最 ...

  5. UVM中重要函数

    1.get_full_name() 获取这个节点的完整层次,这函数在object中就有定义,但是在component类中进行了重载,实现输出从uvm_test_top到当前节点的路径(是通过执行m_s ...

  6. ios开发 将json格式数据上传服务器

    看了一些大小牛的资料其实就3步 1.使用post 请求 ,因为get是不能上传的 2.设置请求类型 , 讲你的json数据上传 3.向服务器发送数据按照下面示例代码,就差不多了 1 // 1.创建请求 ...

  7. 单网口RFC2544测试——信而泰网络测试仪实操

    一.测试拓扑 拓扑说明 测试仪一个端口和DUT一个端口相连 DUT假设是一台交换设备,它能够把测试仪发送的流量直接转发回来 注意:要求DUT必须能够把收到的流量环回出来,否则没有办法测试 二.测试思路 ...

  8. System.Console.WriteLine() 调用原理

    1.System.Console.WriteLine(类的实例)默认调用类的Tostring()方法.如果自定义的新类未override ToString()方法.那么调用Object.ToStrin ...

  9. python3 使用OpenCV计算滑块拼图验证码缺口位置

    前言 滑块拼图验证码的失败难度在于每次图片上缺口位置不一样,需识别图片上拼图的缺口位置,使用python的OpenCV库来识别到 环境准备 pip 安装 opencv-python pip insta ...

  10. QT:异常、错误

    1.Unknown module(s) in QT: xxx 原因1:我们的QT中没有安装这个Module 解决方法:Unknown module(s) 与MaintenanceTool.exe更新. ...