先感叹一下:最近的项目真的很奇葩!!!需求是这样的:我们的项目中引用了两个jar包,这两个jar包是其他项目组提供的,不能修改!奇葩的是:这两个jar中都需要引用方提供一个相同id的bean,而bean的定义却是不同的,也就是虽然id相同,但他们对应的却是两个不同的java类,导致出现的问题是:该id对应的java类满足了第一个jar包的要求,则不能满足第二个jar包的要求,满足了第二个jar包的
作者:京东科技 韩国凯一、项目中存在了名称重复bean众所周知,在Spring中时不能够创建两个名称相同的bean的,否则会在启动时报错:但是我却在我们的spring项目中发现了两个相同名称的bean,并且项目也可以正常启动,对应的bean也可以正常使用。因为项目原因中会用到多个redis集群,所以有配置了多个redis环境,并且在id上做了区分。但是在配置redis环境的时候,两个环境bean
 设置缓存,具体看注释说明,通过设置后可以实现防重复提交等思路,缓存五秒,redis中没有值会自动存储后返回false,如果有值返回true。五秒后自动清理内存。/** * 原子性。。相当于事务锁 包装幂等性操作。不会在执行get或者set的时候开启新的操作。 * 根据key做出的判断。所以要保证key的唯一性,5秒缓存, * @param key
转载 2月前
126阅读
问题: 当我们的web应用做成一个大项目之后,里面有很多的bean配置,如果两个bean的配置id是一样的而且实现类也是一样的,例如有下面两份xml的配置文档: beancontext1.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/sp
Spring实战之bean重复、指定bean的名字、消除bean的歧义性自动装配的歧义性示例解决方案@Primary标示首选bean@Primary注解与@Component注解配合使用@Primary与JavaConfig配合使用@Qualifier限定符创建自定义限定符与组件扫描搭配使用与JavaConfig搭配使用自定义注解实现限定符效果与组件扫描搭配使用与JavaConfig搭配使用
实例化方法,把bean实例化,并且包装成BeanWrapper1、点进这个方法里面。 这个方法是反射调用类中的 factoryMethod 方法。 这要知道@Bean 方法的原理, 实际上spring 会扫描有@bean 注解的方法, 然后把方法名称设置到 BeanDefinition 的 factoryMethod属性中, 接下来就会调到上面截图中的方法实现@Bean 方法的调用。&n
目录前言1 现象2 源码探究3 测试3.1 实现接口情况3.2 去掉实现类或者删除接口中@Bean方法总结 前言当我们在配置类中通过@Bean方法注入对象时,如果设置相同的beanName,会出现注入对象不一致的问题。1 现象前提:设置配置类Config,实现接口MyInterface(接口中必须有一个@Bean方法),同时配置类中设置两个@Bean方法,这两个@Bean名字设置为相同如下图:
首先Web项目使用Spring是通过在web.xml里面配置<br>org.springframework.web.context.ContextLoaderListener初始化IOC容器的。<listener> <listener-class>org.springframework.web.context.ContextLoaderListener&
探讨Spring向容器注册Bean的三种方式重点了解@Import实现的三种子方式前提概要Spring向容器注册Bean的三种方式通过@ComponentScan、@Componet通过@Bean方式通过@Import方式直接导入配置类导入ImportSelector实现类导入ImportBeanDefiniteRegistrar实现类三种方式的区别和应用场景@Import与@Component、
问题提问:  问题分析:beancontext1.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "/spring-beans.dtd"> <beans> <bean id="testbean
Spring容器能对构造函数配的的Bean进行实例化有一个前提,即Bean构造函数入参引用的对象必须已经准备就绪。由于这个机制的限制,如果两个Bean都采用构造函数注入,而且都通过构造函数入残引用对方,就会发生类似线程死锁的循环依赖问题。当S启动pring IoC容器时,因为存在循环依赖问题,Spring容器就无法成功启动。如何解决这个问题呢?用户只需修改Bean的代码,将构造函数注入方式调整为属
1.Bean的基本概念IoC管理的应用程序对象叫做Bean, Bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。在Spring中由BeanDefinition代表,配置元数据指定如何实例化Bean、如何组装Bean等。2.Spring IoC管理Java BeanSpring IoC容器如何知道哪些是它管理的对象呢?在Spr
文章目录什么是循环依赖?Spring 是如何解决 field 属性注入引发的循环依赖问题的?怎么解决构造器注入引发的循环依赖问题? 什么是循环依赖?循环依赖就是循环引用的意思,也就是两个或两个以上的 bean 互相持有对方,最终形成闭环。比如 A 依赖于 B ,B 又依赖于 A 。如下: Spring 注入bean 的方式有 构造器注入、field 属性注入等。Spring 通过特殊的 bean
 一、循环依赖产生的原因 A依赖B,B又依赖A@Component class A { @Autowired B b; } @Component class B { @Autowired A a; }A类Bean创建过程:先实例化A,(一般都是)通过无参构造完成实例化;A属性注入,发现A依赖B,准备B类Bean的创建;实例化B,通过无参构造完成实
转载 4月前
187阅读
  在Spring中,可以有由于存在重复的beanName会有一些问题  下面看看,Spring是怎么处理重复的beanName的1、Spring容器内置了 ConfigurationClassPostProcessor 配置类工厂bean后置处理器,在Bean工厂准备好后,调用 postProcessBeanDefinitionRegistry() 方法来后置处理bean工厂1 @Ov
命名Spring BeanBean 的名称每个Bean 拥有一个或多个标识符(identifiers),这些标识符在Bean 所在的容器必须是唯一的, 但这里的唯一是指在其所在的BeanDefination或BeanFactory中是唯一的, 但并不是应用中是唯一的。通常,一个Bean 仅有一个标识符,如果需要额外的,可考虑使用**别名(Alias)**来扩充。在基于XML(不一定是基于XML文件
转载 1月前
10阅读
一般情况下,在配置一个Bean时需要为其指定一个id属性作为bean的名称。id在IoC容器中必须是唯一的,此外id的命名需要满足xml对id的命名规范。        在实际情况中,id命名约束并不会给我们带来影响。但是如果用户确实希望用到一些特殊字符来对bean进行命名,那么可以使用bean的name属性来进行命名,name属性没有字符上的限制,几乎可以
   普通人:两个id相同的bean应该会报错因为在Spring IOC容器里面,它的id一定是唯一的吧。如果说有两个相同的id的话那就会存在找不到,就是说我们去找一个bean的时候,他会根据名字来找,要么根据类型。在哪个阶段的话。。。应该是在spring启动的时候吧。高手:好的,关于这个问题,我从几个点来回答。首先,在同一个XML配置文件里面,不能存在id相同的两个bea
问题:    最近在做公共框架的构建,由于采用了模块化的插件机制,在开发的过程中,发现不同开发人员的spring配置中,出现了两个bean的配置id和实现类名称都一样的情况。 例如有下面的bean类: package com.XXX.common.test; public class SameNameBea
1. 什么是循环依赖一个项目,随着业务的扩展,功能的迭代,必定会存在某些类和类之间的相互调用,比如 serviceA 调用了serviceB 的某个方法,同时 serviceB 也调用了serviceA 中的某个方法,从而形成了一种循环依赖的关系。假如 Spring 容器启动后,先会实例化 A,但在 A 中又注入了 B,然后就会去实例化 B,但在实例化 B 的时候又发现 B 中注入了 A,于是又继
  • 1
  • 2
  • 3
  • 4
  • 5