Spring——自动装配的三种实现方式
依赖注入的本质是装配,装配是依赖注入的具体行为
spring会在上下文中自动寻找,并自动给bean装配属性
自动装配的三种方式
(1).在xml中显式的装配
(2).在java中显式的装配
(3).隐式的自动装配bean
这里主要讲第三种
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.使用注解实现自动装配
使用:
导入约束
配置注解的支持
<?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>
常用注解:
@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;
}
@Resource:jdk注解
name:用于起别名
区别:
实现方式:
(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——自动装配的三种实现方式的更多相关文章
- spring自动注入的三种方式
所谓spring自动注入,是指容器中的一个组件中需要用到另一个组件(例如聚合关系)时,依靠spring容器创建对象,而不是手动创建,主要有三种方式: 1. @Autowired注解——由spring提 ...
- Spring管理Bean的三种创建方式
1.使用类构造器实例化 (90%以上都是使用这种) <bean id=“orderService" class="cn.itcast.OrderServiceBean&qu ...
- Spring依赖注入的三种方式
看过几篇关于Spring依赖注入的文章,自己简单总结了一下,大概有三种方式: 1.自动装配 通过配置applicationContext.xml中的标签的default-autowire属性,或者标签 ...
- Spring IOC以及三种注入方式
IOC是spring的最基础部分,也是核心模块,Spring的其他组件模块和应用开发都是以它为基础的.IOC把spring的面向接口编程和松耦合的思想体现的淋漓尽致. IOC概念 IOC(Invers ...
- Spring 使用AspectJ的三种方式
Spring 使用AspectJ 的三种方式 一,使用JavaConfig 二,使用注解隐式配置 三,使用XML 配置 背景知识: 注意 使用AspectJ 的 时候 要导入相应的Jar 包 嗯 昨天 ...
- Spring IOC 中三种注入方式
项目错误知识点记录 正文 最近在项目的时候,用到Spring框架,Spring框架提供了一种IOC的自动注入功能,可以很轻松的帮助我们创建一个Bean,这样就省的我们四处写new Object()这样 ...
- Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式
我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有 ...
- spring Bean的三种配置方式
Spring Bean有三种配置方式: 传统的XML配置方式 基于注解的配置 基于类的Java Config 添加spring的maven repository <dependency> ...
- spring注解之@Import注解的三种使用方式
目录 1.@Import注解须知 2.@Import的三种用法 3.@Import注解的三种使用方式总结 @ 1.@Import注解须知 1.@Import只能用在类上 ,@Import通过快速导入的 ...
随机推荐
- c++ 堆栈和内存管理
stack(栈),heap(堆) Stack:是存在于某作用域(scope)的一个内存空间(memory space).例如当你调用函数,函数本身即会形成一个stack用来放置它所接收的参数,返回地址 ...
- CentOS7搭建ntp时钟服务器
文章目录 服务器配置 远程客户端配置 服务器配置 # 关闭防火墙,selinux=disabled 1.# 服务器部署 [root@localhost ~]# yum -y install ntp n ...
- Spring AOP应用之一:声明式事务
所有数据访问技术都提供事务处理机制,这些技术提供了API用来开启事务.提交事务完成数据操作,或者在发生错误的时候回滚数据.Spring本身并不支持事务实现,同时只是负责提供标准接口来处理不同数据访问技 ...
- Eureka工作原理及心跳机制
Eureka原理 1.基本原理上图是来自eureka的官方架构图,这是基于集群配置的eureka:处于不同节点的eureka通过Replicate进行数据同步Application Service为服 ...
- VMware vSphere,ESXi和vCenter的关系和区别
VMware Inc.是一家软件公司.它开发了很多产品,尤其是各种云解决方案 .他的云解决方案包括云产品,数据中心产品和桌面产品等. vSphere是在数据中心产品下的一套软件.vSphere类似微软 ...
- 『德不孤』Pytest框架 — 8、Pytest断言
目录 1.什么是断言 2.Pytest断言 3.Pytest的断言方式及应用场景 (1)使用assert语句 (2)断言预期的异常 (3)拓展 4.优化断言 5.使用标记检查异常 1.什么是断言 对于 ...
- 【Oracle】PLSQL如何更新、提交数据库中数据
转至:https://blog.csdn.net/Bee_AI/article/details/89279612 Oracle更新单表数据时,一般使用SELECT--FOR UPDATE语句,这条语句 ...
- vim编辑以及脚本编程练习
转至:http://www.178linux.com/88128 vim编辑器的使用总结: vim在工作过程当中有三种模式:编辑模式.输入模式.末行模式. 1.编辑模式:即命令模式,键盘操作常被理解为 ...
- 转 Linux下安装Tomcat服务器和部署Web应用
转载声明: http://www.cnblogs.com/xdp-gacl/p/4097608.html 一.上传Tomcat服务器
- SVN库文件上传操作步骤
SVN库文件上传步骤: 1,sv st 或 svn status 查看本地库与远程库的差别(M代表文件有修改,?代表目录中有文件本地新增加) 2,根据1步骤中的查看结果:svn diff 差异文 ...