Spring杂记BeanFactory之getBean方法】的更多相关文章

1.(BeanFactory) getBean(beanName) 2.(AbstractBeanFactory) doGetBean 3.(AbstractBeanFactory) transformedBeanName //如果是&beanName工厂类形式去掉第一个& 4.(AbstractBeanFactory) getSingleton 5.(DefaultSingletonBeanRegistry) getSingleton //从Map<String, Object&g…
初探getBean()方法 在使用Spring的时候可以通过如下方式调用getBean方法来获取某个Bean: User user = context.getBean(User.class); AbstractApplicationContext中定义了一系列getBean方法,代码如下: //--------------------------------------------------------------------- // Implementation of BeanFactory…
Spring之BeanFactory源码分析(一) ​ 注意:该随笔内容完全引自https://blog.csdn.net/u014634338/article/details/82865644,写的很好,非常感谢,复制过来算是个积累,怕以后找不到. BeanFactory BeanFactory提供的是最基本的IOC容器的功能,BeanFactory 只是一个接口类,并没有给出容器的具体实现,当然,它有不同的实现类,来定义或者扩充某个功能.这篇文章的主角就是它啦. 启动IOC容器 下面是一段简…
spring 缺省: 1.spring用DefaultListableBeanFactory.preInstantiateSingletons()建立bean实例 2.缺省采用单例模式 在最近的项目中,有个地方我们不得不实用getBean的方法,自己从Spring context中获取bean进行数据库操作. 方法一(效率低,极易出现bug,不推荐使用): 刚刚开始的时候,我们使用这中方式,但是在应用过程中发现此方式效率低下,而且极易出现bug. 在我们系统中会生成ehcache_auto_cr…
十年阿里,就只剩下这套Java开发体系了 >>>   在最近的项目中,有个地方我们不得不实用getBean的方法,自己从Spring context中获取bean进行数据库操作. 方法一(效率低,极易出现bug,不推荐使用): 刚刚开始的时候,我们使用这中方式,但是在应用过程中发现此方式效率低下,而且极易出现bug. 在我们系统中会生成ehcache_auto_created_时间戳文件夹, <!-- lang: java --> String[] xmlCfg = new…
前言 本篇文章主要介绍 Spring IoC 容器 getBean() 方法. 下图是一个大致的流程图: 正文 首先定义一个简单的 POJO,如下: public class User { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name…
背景: 在spring ioc refresh()方法中,看到了如下逻辑: 要理解该逻辑的原理,先看场景:有个接口InterFaceA,它有2个实现类A1和A2 那么,如果一个类C 依赖了InterFaceA,此时sprig不知道要注入哪个实现类: public interface InterFaceA { void hello(); } @Component public class A1 implements InterFaceA { @Override public void hello(…
一直知道Spring是运用反射技术的,但具体怎么用呢?今天就模拟下getBean方法. 步骤: 1.用Dom4j解析xml配置文件,取出我们需要的信息 2.遍历Bean节点,根据每个Bean节点的class属性值通过反射生成相应的对象 3.解析Bean节点的子节点,用于给对象的属性赋值(调用set方法)或者其他 4.把每个Bean节点封装好的对象放入Map集合里 具体操作如下: 一.xml配置(自己模拟写的xml) <?xml version="1.0" encoding=&qu…
Spring容器的getBean方法是通过反射机制实现的,下面的测试程序模拟getBean的实现原理. 步骤一:pom.xml文件配置解析XML文件的dom4j.jar 步骤二:XML文件中配置bean标签 步骤三:创建测试类ParseSpringXMLTest,设置成员属性,由于bean标签中没有设置Scope属性,故默认使用singleton创建单例.这里创建一个Map集合保存创建好的对象. 步骤四:创建构造器,初始化成员属性 步骤五:模拟实现getBean方法 步骤六:测试程序 步骤七:控…
1.spring通过BeanFactory灵活配置.管理bean,Spring对管理的bean没有任何特别的要求,完全支持对POJO的管理: 2.BeanFactory有个ApplicationContext子接口,该接口比BeanFactory增强了更多的功能,该接口的实例有时被称为Spring的上下文,在通常的J2EE应用中,都应该考虑ApplicationContext接口,只有在J2EE应用非常关注内存的情况下,才考虑使用BeanFactory 3.Spring以bean方式管理组件,J…
spring的IOC容器能够帮我们自动new对象,对象交给spring管之后我们不用自己手动去new对象了.那么它的原理是什么呢?是怎么实现的呢?下面我来简单的模拟一下spring的机制,相信看完之后就会对spring的原理有一定的了解. spring使用BeanFactory来实例化.配置和管理对象,但是它只是一个接口,里面有一个getBean()方法.我们一般都不直接用BeanFactory,而是用它的实现类ApplicationContext,这个类会自动解析我们配置的applicatio…
Spring通过资源加载器加载相应的XML文件,使用读取器读取资源加载器中的文件到读取器中,在读取过程中,解析相应的xml文件元素,转化为spring定义的数据结BeanDefinition,把相应的BeanDefinition注册到注册表中.注册表中包含的BeanDefinition的数据结构,没有经过加工处理过,无法得到我们想要的bean对象.我们如何得到Bean对象,spring都做了那些工作?BeanFactory提供了多种方式得到bean对象,getBean()方法是最核心得到bean…
共同点: 都是接口 区别: BeanFactory 以Factory结尾,表示它是一个工厂类,用于管理Bean的一个工厂 在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的. 但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean, 它的实现与设计模式中的工厂模式和修饰器模式类似. 1. BeanFactory BeanFactory定义了IOC容器的最基本形式,并提供了IOC容器应遵守的的最基本的接…
上一篇文章介绍了Java反射机制在Spring IOC中的应用,知道了BeanFactory底层的实现原理. 原理搞懂了,对Spring IOC理解起来也很容易. 先来看看Java代码获取Spring中Bean的代码(一共有五种方式,这里只展示其中一种方法): 有没有发现上面的代码与利用反射实现工厂模式的代码很相似.对,你没有看错,Spring中的BeanFactory用到的就是简单工厂模式. 现在的思路就更加清晰了,要想实现Spring中的BeanFactory,无非就用到了以下几个技术: 1…
:BeanFactory基本的工厂解析,管理,实例化所有容器内的bean的接口,spring中所有解析配置文件的类都直接或者间接实现该接口ApplicationContext接口implements BeanFactory创建对象的特点:BeanFactory 在解析配置文件时并不会初始化对象,只有在使用对象时(getBean())才会对该对象进行初始化ApplicationContext 在解析配置文件时对配置文件中的所有对象都初始化了,getBean()方法只是获取对象的过程…
使用BeanFactory从xml配置文件加载bean: import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.FileSystemResource; public class XmlConfigWithBeanFactory {     public static void main(String[] args) { XmlBeanFactory facto…
本文首发于个人微信公众号:Coder小黑 踩坑了?! 之前推文已经讲过 当@Transactional遇到@CacheEvict,你的代码是不是有bug! 现在要在事务提交之后清除缓存.在Spring4.2 之后,可以使用@TransactionalEventListener选择在事务提交之后再消费对应的事件. 为了方便发送事件,偷懒使用了静态方法: 其中,SpringUtil.getBean()方法的内部实现为: 满心欢喜写完代码,一运行,直接报错,报错信息为 IoC 容器中不存在Applic…
Spring之BeanFactory源码分析(二) 前言 在前面我们简单的分析了BeanFactory的结构,ListableBeanFactory,HierarchicalBeanFactory,AutowireCapableBeanFactory.主要核心类DefaultListableBeanFactory,通过编程启动IOC容器 将BeanFactory的功能逐渐的剥离开来,方便我们理解整个架构. ClassPathResource resource = new ClassPathRes…
在Spring中有BeanFactory和FactoryBean这2个接口,从名字来看很相似,比较容易搞混. 一.BeanFactory BeanFactory是一个接口,它是Spring中工厂的顶层规范,是SpringIoc容器的核心接口,它定义了getBean().containsBean()等管理Bean的通用方法.Spring的容器都是它的具体实现如: DefaultListableBeanFactory XmlBeanFactory ApplicationContext 这些实现类又从…
官方定义 BeanFactory:Spring Bean容器的根接口 FactoryBean:各个对象的工厂接口,如果bean实现了这个接口,它将被用作对象的工厂,而不是直接作为bean实例. 源码解析 BeanFactory public interface BeanFactory { //标注是获取FactoryBean的实现类,而不是调用getObject()获取的实例 String FACTORY_BEAN_PREFIX = "&"; Object getBean(St…
1.Beanfactory和ApplicationContext有什么区别 ApplicationContext (1)在配置文件加载后创建bean 利用debug方式,在Student类的无参构造方法中书写输出语句,可以看看到在配置文件加载后即完成了bean的创建 (2)继承BeanFactory接口 (3)总结 ApplicationContext: 应用上下文,继承BeanFactory接口,它是更高级的容器,它在启动的时候就把所有的Bean全部实例化了,可以及时检查依赖是否完全注入.并且…
一.BeanFactory的基本类体系结构(接口为主):…
一个工作了六年多的粉丝,胸有成竹的去京东面试. 然后被Spring里面的一个问题卡住,唉,我和他说,6年啦,Spring都没搞明白? 那怎么去让面试官给你通过呢? 这个问题是: Spring中BeanFactory和FactoryBean的区别. 好吧,对于这个问题看看普通人和高手的回答. 普通人: 嗯.......... 高手: 关于这个问题,我从几个方面来回答. 首先,Spring 里面的核心功能是IOC容器,所谓IOC容器呢,本质上就是一个Bean的容器或者是一个Bean的工厂. 它能够根…
BeanFactory是Spring的“心脏”.它就是Spring IoC容器的真面目. Spring使用BeanFactory来实例化.配置和管理Bean.但是,在大多数情况我们并不直接使用BeanFactory,而是使用ApplicationContext.它也是BeanFactory的一个实 现,但是它添加了一系列“框架”的特征,比如:国际化支持.资源访问.事件传播等. BeanFactory其实是一个接口-org.springframework.beans.factory.BeanFac…
转自:http://www.sohu.com/a/115194552_466964 我们知道可以通过ApplicationContext的getBean方法来获取Spring容器中已初始化的bean.getBean一共有以下四种方法原型: l getBean(String name) l getBean(Class<T> type) l getBean(String name,Class<T> type) l getBean(String name,Object[] args) 下…
本文使用的代码是: Spring 3.0 接 触Spring也有很长一段时间了.但是,每次都是直接使用Spring直接提供的API,时间久了,自然也会想探索Spring里面的奥秘.今天上 午,整理出了Spring的BeanFactory的一个体系结构(当然不是完整的,是以XmlFactory为最终目标),如下图(点击可到图片页 面): 图下次补上. 沿着XmlBeanFactory向上追溯,可以形成上面的BeanFactory体系结构.虽然不是 很全面,但是如果这个图能理解透,我相 信,Spri…
使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过,并经过验证: 二种是用户和权限用数据库存储,而资源(url)和权限的对应采用硬编码配置,目前这种方式已经实现,并经过验证. 三种是细分角色和权限,并将用户.角色.权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器,     并分别实现Ac…
1.什么是工厂方法 这里的工厂方法指的是创建指定bean的方法.工厂方法又分为静态工厂方法和实例工厂方法. 2.静态工厂方法配置bean 调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,不需要创建工厂实例就可以返回工厂创建的对象,就叫做静态工厂,当客户端需要对象时,只需要简单的调用静态方法,而不需要关心创建对象的细节.要声明通过静态方法创建的Bean,需要在Bean的class属性指定拥有该工厂的方法的类,同时在factory-method属性里指定工厂方法的名称,最后使用<co…
目录 使用情景 目的 实现方式 前提: 思路 核心类 测试方法 源码分享 使用情景 将定时任务录入数据库(这样做的好处是定时任务可视化,也可以动态修改各个任务的执行时间),通过反射执行对应的方法: 配合Netty实现简单的HTTP请求处理框架 其他需要使用反射执行Spring方法的业务亦可 目的       很多文章都提到了反射,但是对于方法参数处理这一块都是明确了类型,不支持按照实际参数动态转换,而本篇文章提供了一个思路怎么做到方法参数的动态调用.       大家也可以通过利用本文的方法结合…
Spring源码之六-onRefresh()方法 大家好,我是程序员田同学. 今天带大家解读Spirng源码之六的onRefresh()方法,这是refresh()的其中的一个方法,看似是一个空方法,实则他是非常非常重要的,对于提高Spring的扩展性. 老规矩,先贴上Spring的核心方法refresh()方法的源码,以便读者可以丝滑入戏. @Override public void refresh() throws BeansException, IllegalStateException…