spring框架中多个bean组件有冲突?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring框架中多个bean组件有冲突?相关的知识,希望对你有一定的参考价值。
如图, Mother和Message两个类没有任何关系,在类中一个用的是MessageBean bean = (MessageBean)ac.getBean("message");另一个Mother mother = (Mother)ac.getBean("mother1");应该互不影响,可是我TestMessage时,会报错,控制台打印的都是关于mother和Friend bean组件的错,注释掉就能正常运行,反之,运行TestMother也一样,这是为什么,他们应该是通过ac.getBean找自己的组件,怎么会冲突? 两个class类没有任何关系,求高手
把生成的.class、目标目录中的配置、等清理一次,全部重新生成一次试试 参考技术A Friend 这个类有错吗?你的mother1bean里面注入了myfriend,spring会执行的追问没错, 是Message和Mother冲突,firend注入到mother了 , 和Message没任何关系,如果我把Friend和Mother的组件删了,Message就能正常运行,加进来会报错,他们之间毫无关系
追答不是没有关系的,你注入了friend就相当于实例化了,只不过是spring帮你写new
参考技术B 如一楼所说MonhterImpl 和MontherImpl1实现的是同一个接口吗?追问是的,但是我不运行1,mother1这个bean组件就不应该被调用,相当于没写啊
追答您理解错了,依赖注入DI,是在spring初始化的时候就实例化了各个被管理的类,并不是你调用的时候才初始化
参考技术C 请问楼主MonhterImpl 和MontherImpl1实现的是同一个接口吗?追问是的,但是我不运行1,mother1这个bean组件就不应该被调用,相当于没写啊
追答程序里是没运行,但是容器初始化会有个预编译的过程,所以不要这么写吧!
最直白解释spring核心组件(CoreContext和Beans)
Spring总共有十几个组件,但是真正核心的组件只有几个,下面是Spring框架的总体架构图:
图1.Spring框架的总体架构图
从上图中可以看出Spring框架中的核心组件只有三个:Core、Context和Beans。它们构建起了整个Spring的骨骼架构。没有它们就不可能有AOP、Web等上层的特性功能。下面也将主要从这三个组件入手分析Spring。
Spring的设计理念
前面介绍了Spring的三个核心组件,如果再在它们三个中选出核心的话,那就非Beans组件莫属了,为何这样说,其实Spring就是面向Bean的编程(BOP,Bean Oriented Programming),Bean在Spring 中才是真正的主角。
Bean在Spring中作用就像Object对OOP的意义一样,没有对象的概念就像没有面向对象编程,Spring中没有Bean也就没有Spring存在的意义。就像一次演出舞台都准备好了但是却没有演员一样。为什 么要Bean这种角色Bean或者为何在Spring如此重要,这由Spring框架的设计目标决定,Spring为何如此流行,我们用Spring的原因是什么,想想你会发现原来Spring解决了一个非常关键的问题他可以让 你把对象之间的依赖关系转而用配置文件来管理,也就是他的依赖注入机制。而这个注入关系在一个叫Ioc容器中管理,那Ioc容器中有又是什么就是被Bean包裹的对象。Spring正是通过把对象包装在 Bean中而达到对这些对象管理以及一些列额外操作的目的。
它这种设计策略完全类似于Java实现OOP的设计理念,当然了Java本身的设计要比Spring复杂太多太多,但是都是构建一个数据结构,然后根据这个数据结构设计他的生存环境,并让它在这个环境中 按照一定的规律在不停的运动,在它们的不停运动中设计一系列与环境或者与其他个体完成信息交换。这样想来回过头想想我们用到的其他框架都是大慨类似的设计理念。
核心组件如何协同工作
前面说Bean是Spring中关键因素,那Context和Core又有何作用呢?前面吧Bean比作一场演出中的演员的话,那Context就是这场演出的舞台背景,而Core应该就是演出的道具了。只有他们在一起才能 具备能演出一场好戏的最基本的条件。当然有最基本的条件还不能使这场演出脱颖而出,还要他表演的节目足够的精彩,这些节目就是Spring能提供的特色功能了。
我们知道Bean包装的是Object,而Object必然有数据,如何给这些数据提供生存环境就是Context要解决的问题,对Context来说他就是要发现每个Bean之间的关系,为它们建立这种关系并且要维护好 这种关系。所以Context就是一个Bean关系的集合,这个关系集合又叫Ioc容器,一旦建立起这个Ioc容器后Spring就可以为你工作了。那Core组件又有什么用武之地呢?其实Core就是发现、建立和维护每 个Bean之间的关系所需要的一些列的工具,从这个角度看来,Core这个组件叫Util更能让你理解。
它们之间可以用下图来表示:
图2.三个组件关系
以上是关于spring框架中多个bean组件有冲突?的主要内容,如果未能解决你的问题,请参考以下文章