Spring处理自动装配的歧义性】的更多相关文章

1.标识首选的bean 2.使用限定符@Qualifier 首先在bean的声明上添加@Qualifier 注解: @Component @Qualifier("cdtest") //里面的参数为任意你想取得名字 public class CDTest1 implements CD { private String title = "十一月的肖邦"; private String artist = "JayZhou"; public void p…
仅有一个bean匹配所需的结果时,自动装配才是有效的.如果不仅有一个bean能够匹配结果的话,这种歧义性会阻碍Spring自动装配属性.构造器参数或方法参数.为了阐述自动装配的歧义性,假设我们使用@Autowired注解标注了setDessert()方法: 在本例中,Dessert是一个接口,并且有三个类实现了这个接口,分别为Cake.Cookies和IceCream: 因为这三个实现均使用了@Component注解,在组件扫描的时候,能够发现它们并将其创建为Spring应用上下文里面的bean…
1. 什么是自动装配的歧义性? 在Spring中,装配bean有以下3种方式: 自动装配 Java配置 xml配置 在这3种方式中,自动装配为我们带来了很大的便利,大大的降低了我们需要手动装配bean的代码量. 不过,自动装配也不是万能的,因为仅有一个bean匹配条件时,Spring才能实现自动装配,如果出现不止1个bean匹配条件时,Spring就会不知道要装配哪个bean,抛出org.springframework.beans.factory.NoUniqueBeanDefinitionEx…
一.歧义性 当我们使用spring的注解进行自动装配bean时,如果不仅有一个bean能够匹配结果的话,会抛出NoUniqueBeanDefinitionException: 例如本例中 当spring尝试为DuckBasket类注入duck属性时就会抛出该异常 因为greenDuck类,和redDuck类都实现了Duck接口,换言之,Duck类型有两个实现类,也就是有两个可以匹配的bean造成了歧义性,spring不知道该注入哪个bean给该属性. 二.解决方法 (1)标识首选的bean--通…
我们已经看到如何使用自动装配让Spring完全负责将bean引用注入到构造参数和属性中.自动装配能够提供很大的帮助.不过,spring容器中仅有一个bean匹配所需的结果时,自动装配才是有效的.如果不仅有一个bean能够匹配结果的话,Spring此时别无他法,只好宣告失败并抛出异常.更精确地讲,Spring会抛出NoUniqueBeanDefinitionException. 当确实发生歧义性时,Spring提供了多种可选方案来解决这样的问题.你可以将可选bean中的某一个设为首选(primar…
1.Spring进行自动装配时碰到的bean歧义性问题. 在进行自动装配时,只有仅有一个bean匹配所需结果时,才是可行的. 如果不仅仅一个bean能够匹配结果,例如一个接口有多个实现,这种歧义性会阻碍Spring自动装配属性.构造器参数或者方法参数. (虽然在实际中,这种歧义性问题很罕见,通常所需的接口只有一个实现类.) 2.Spring提供的解决方案 A. 将可选bean中的某一个设为首选(primary)的bean: B. 使用限定符,使得Spring可选的bean减少为一个(only o…
自动装配可以对依赖注入提供很大帮助,因为它会减少装配应用程序组件时所需的显式装配的数量. 不过,仅有一个bean匹配所需的结果时,自动装配才是有效的.如果不仅有一个bean能够匹配的话,这种歧义性会阻碍Spring自动装配属性,构造器参数或方法参数.但是,当确实发生歧义性时,Spring提供了多种可选方案来解决这样的问题.你可以将可选bean中的某一个设为首选(primary)的bean,或者使用限定符(qualifier)来帮助Spring将可选的bean的范围缩小到只有一个bean. jav…
在前面,学习如何装配Bean的时候,或许会发现,有的同类型的Bean智能配置一个 如下: package com.bean.java; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * Created by IntelliJ IDEA. * Author XueYuan * Data 2017/02/22 *…
Spring的自动装配与依赖注入 装配 = 创建Bean + 注入Bean 创建Bean 自动发现 显式注册Bean 注入Bean 基于配置的注入 自动注入 Spring的装配分为显式装配和隐式装配,涉及到自动装配.隐式的Bean发现机制.依赖注入等术语,但是在我看来装配整个过程分为两步,创建和注入.首先要创建Bean,不管是通过Spring的扫描机制去自动发现我们声明好的Bean还是在配置文件中把Bean声明出来:其次就是把满足依赖关系的Bean注入到需要的地方去. 创建Bean 自动发现 虽…
spring的自动装配功能的定义:无须在Spring配置文件中描述javaBean之间的依赖关系(如配置<property>.<constructor-arg>).IOC容器会自动建立javabean之间的关联关系. 如果没有采用自动装配的话,手动装配我们通常在配置文件中进行实现:以下代码就是手动装配: ? 1 2 3 4 5 6 7 8 9 10 <beans xmlns="http://www.springframework.org/schema/beans&q…
让spring完成自动装配 Autowiring 解决标签为javaBean注入时难以维护而实现的 下面是几种autowire type的说明: 1,byname:试图在容器中寻找和需要自动装配的属性名相同的bean或id,如果没有找到相应的bean,则这个属性未被装配上.配置文件中的id/name中查找 2,byType:试图在容器中寻找一个与需要自动装配的属性类型相同的bean或id,如果没有找到,则该属性未被装配上.相当set方法注入. 3,constructor:试图在容器中寻找与需要自…
首先用@Component注解类: package soundsystem: import org.springframework.stereotype.Component; @Component public class TestBean{ …… } @Component("bean id")可以为Bean命名相当于XML中的<bean name = "bean id",class="soundsystem.TestBean">&l…
前言 开心一刻 十年前,我:我交女票了,比我大两岁.妈:不行!赶紧分! 八年前,我:我交女票了,比我小两岁,外地的.妈:你就不能让我省点心? 五年前,我:我交女票了,市长的女儿.妈:别人还能看上你?分了吧! 今年,我挺着大肚子踏进家门.妈:闺女啊,你终于开窍了 ! 前情回顾 Spring拓展接口之BeanPostProcessor,我们来看看它的底层实现中讲到了spring对BeanPostProcessor的底层支持,并且知道了BeanPostProcessor的两个方法:postProces…
目录 目录 前言 1.起源 2.Spring Boot 自动装配实现 2.1.@EnableAutoConfiguration 实现 2.1.1. 获取默认包扫描路径 2.1.2.获取自动装配的组件 2.2.自动装配的组件内部实现 3.总结 目录 前言         最近在学习Spring Boot相关的课程,过程中以笔记的形式记录下来,方便以后回忆,同时也在这里和大家探讨探讨,文章中有漏的或者有补充的.错误的都希望大家能够及时提出来,本人在此先谢谢了! 开始之前呢,希望大家带着几个问题去学习…
Spring之自动装配 ​ Spring利用依赖注入(DI),完成对IOC容器中各个组件依赖关系的赋值. [1]@Autowired @Autowired 注解,它可以对类成员变量.方法及构造函数进行标注,完成自动装配的工作. 通过 @Autowired的使用来消除 set ,get方法.在使用@Autowired之前,我们对一个bean配置其属性时,是这样做的: <property name="属性名" value="属性值"/> 通过这种方式来,配置…
Eureka 系列(03)Spring Cloud 自动装配原理 [TOC] 0. Spring Cloud 系列目录 - Eureka 篇 本文主要是分析 Spring Cloud 是如何整合 Eureka 的,但不会具体分析 Eureka 的源码,之后的文章会对 Eureka 的源码做一个比较具体的分析. 1. Eureka Client 自动装配 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ org.spr…
前言 一些朋友问我怎么读源码,这篇文章结合我看源码时候一些思路给大家聊聊,我主要从这三个方向出发: 确定目标,这个目标要是一个具体,不要一上来我要看懂Spring,这是不可能的,目标要这么来定,比如看懂Spring Boot的自动装配.Spring IOC XML加载流程等等,尽量小,能够快速搞定的,不要目标太大,陷入其中,反而效果不好: 学会猜,这个猜字其实很有精华,这个可能需要大家积累一段时间才能猜的很准,高手其实都是用猜的,我还没有达到这个境界,但是也是稍微有了一些门道,这个第二点看能力可…
1.环境准备 使用IDEA Spring Initializr快速创建一个Spring Boot项目 添加一个Controller类 @RestController public class HelloController { @RequestMapping("hello") public String hello() { return "hello"; } } 主配置类如下 @SpringBootApplication public class Springboo…
Spring Boot 自动装配流程 本文以 mybatis-spring-boot-starter 为例简单分析 Spring Boot 的自动装配流程. Spring Boot 发现自动配置类 这里说的自动配置类指的是在 META-INF/spring.factories 文件中声明的 XXXAutoConfiguration 类. 首先,我们从 @SpringBootApplication 注解的定义中,我们可以发现有一个叫做 @EnableAutoConfiguration 的注解,这也…
一.Spring Boot整合第三方组件(Redis为例) 1.加依赖 <!--redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2.加配置 spring.redis.host=127.0.0.1 spr…
Spring Boot 自动装配原理 Spring Boot 在启动之前还有一系列的准备工作,比如:推断 web 应用类型,设置初始化器,设置监听器,启动各种监听器,准备环境,创建 applicationContext,准备 context 上下文对象,在 prepareContext 的时候,将 main 函数所在的类(也就是主类)通过 AnnotatedBeanDefinitionReader 注入到 IOC 中,然后 refreshContext 开始刷新,这里面会调用 AbstractA…
Spring利用依赖注入(DI)完成对IOC容器中中各个组件的依赖关系赋值 一.@Autowired 默认优先按照类型去容器中找对应的组件(applicationContext.getBean(BookDao.class)) 如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找(applicationContext.getBean("bookDao")) 自动装配默认一定要将属性赋值好,没有就会报错:可以使用@Autowired(required=false); 标注的…
Bean的自动装配 自动装配说明 自动装配是使用spring满足bean依赖的一种方法 spring会在应用上下文中为某个bean寻找其依赖的bean. Spring的自动装配需要从两个角度来实现,或者说是两个操作: 组件扫描(component scanning):spring会自动发现应用上下文中所创建的bean 自动装配(autowiring):spring自动满足bean之间的依赖,也就是我们说的IoC/DI: 组件扫描和自动装配组合发挥巨大威力,使得显示的配置降低到最少. 推荐不使用自…
自动装配 1.歧义性 我们知道用@Autowired可以对bean进行注入(按照type注入),但如果有两个相同类型的bean在IOC容器中注册了,要怎么去区分对哪一个Bean进行注入呢? 如下情况,若用@Autowired的方式按类型注入,IOC容器就不知道应该注入哪个了: <bean name="source1" class="pojo.Source"> <property name="fruit" value="…
一. 假设有如下三个类实现同一个接口,则自动装配时会产生歧义 @Component public class Cake implements Dessert { ... } @Component public class Cookies implements Dessert { ... } @Component public class IceCream implements Dessert { ... } @Autowired public void setDessert(Dessert de…
一. The @Qualifier annotation is the main way to work with qualifiers. It can beapplied alongside @Autowired or @Inject at the point of injection to specify whichbean you want to be injected. For example, let’s say you want to ensure that theIceCream…
前言 译文链接:http://websystique.com/spring/spring-auto-detection-autowire-component-scanning-example-with-annotations/ 在本篇文章我们会看到Spring是如何通过component-scanning配置,在没有使用@Bean和@Configuration声明bean,也没有使用XML配置声明bean的情况下,自动检测到程序中配置的bean,并且自动装配这些bean. 对于component…
当开始看别人的代码使用注解的时候,以为照着别人的代码写,也写一个注释就能实现这样的功能,但是,现在开始考虑自动装配时怎样实现的. 首先,如果如果知道如何手动在xml配置中"装配bean",那么在理解自动装配就比较简单了,如果想直接了解自动装配,那还得从手动装配开始. XML配置里的bean的自动装配 *Spring IOC 容器可以自动装配Bean,需要做的仅仅是在Bean的autowire属性中指定自动装配的模式 *byType (根据类型自动装配):若IOC容器中有多个与目标Bea…
自动装配,官方给出的定义是这样:Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系.因此,如果可能的话,可以自 动让Spring通过检查BeanFactory中的内容,来替我们指定bean的协作者(其他被依赖的bean).由于 autowire可以针对单个bean进行设置,因此可以让有些bean使用autowire,有些bean不采用.autowire的 方便之处在减少或者消除属性或构造器参数的设置,这样可以给我们的配置文件减减肥 其实,自动装配就是让我们少些…
Spring中有四种自动装配类型,分别为:byName,byType,constructor,autodetect,下面来分别介绍一下这些是如何自动装配的 <bean id="foo" class="...Foo" autowire="autowire type"> 有四种自动装配类型: 1.byName:寻找和属性名相同的bean,若找不到,则装不上. 2.byType:寻找和属性类型相同的bean,找不到,装不上,找到多个抛异常.…