分别看这俩文章就知道了 Spring的FactoryBean使用 Spring加载xml配置文件的方式 ApplicationContext…
FactoryBean和BeanFactory两只是两个单词顺序不同但是内容大不相同.落脚点在后面一个单词,前面一个单词是其功能描述:FactoryBean--工厂bean,一个建工厂的bean?BeanFactory--bean工厂,一个生产bean的工厂.初识比较拗口像最开始接触函数指针与指针函数一样. Sring对外提供接口XXXApplicationContext的继承UML图,可以看到BeanFactory是容器的顶级接口,具体使用是其某个子类.本文不详述BeanFactory,在前面…
写在前面 上文Spring源码学习-容器BeanFactory(二) BeanDefinition的创建-解析前BeanDefinition的前置操作中Spring对XML解析后创建了对应的Document对象,处理完profile后终于到了标签的解析,这篇文章主要来探究Spring默认标签的解析. 1.4 BeanDefinition的创建 - 处理Spring默认标签 protected void parseBeanDefinitions(Element root, BeanDefiniti…
1.BeanFactory提供的是最基本的IoC容器的功能,关于这些功能定义,我们可以在接口BeanFatory中看到. 2.BeanFactory接口定义了IoC容器最基本的容器的形式,并且提供了IoC容器所应该遵守的最基本的服务契约,同时,这也是我们使用IoC容器所应遵守的最底层和最基本的编程规范,这些接口定义勾画出了IoC的基本轮廓. 3.很显然,在Spring的代码实现中,BeanFactory只是一个接口类,并没有给出容器的具体实现,而我们在图中看到的各种具体类,比如DefaultLi…
写在前面 从大四实习至今已一年有余,作为一个程序员,一直没有用心去记录自己工作中遇到的问题,甚是惭愧,打算从今日起开始养成写博客的习惯.作为一名java开发人员,Spring是永远绕不过的话题,它的设计精巧,代码优美,值得每一名开发人员学习阅读. 在我最开始学习javaEE时,第一次接触Spring是从一个S(Struts)S(Spring)H(Herbinate)的框架开始.由java原生开发到框架开发转换过程中,那时我的印象里Struts负责控制层,herbinate负责数据层,而Sprin…
写在前面 上文Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签对Spring默认标签的解析做了详解,在xml元素的解析中,Spring的整体思路就是按部就班的读取标签并把数据放入一个map集合中以备后用. ps:以前在看别人写博客时没有很注意,到自己写才发现:博文一长,如何去维持文章的可读性,让读者在阅读时理清整篇文章的脉络实在是一件很难的事情.上篇文章就是如此,我自己回头去读时都难以去顺畅的学习,何况他人,甚是惭愧.也尝试数…
写在前面 上文 Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件主要讲Spring容器创建时通过XmlBeanDefinitionReader读取配置文件,将其经过编码并经过系列处理后,交给了同类中的doLoadBeanDefinitions()方法,这次就直接进入这个方法,来看看Spring到底是如何创建BeanDefinition的. 1.2 BeanDefinition的创建 - 创建BeanDefinition前的最终准备 首先进入…
有的人说事物在spring里设置有两种,其实事物设置在spring配置文件中共有五种方式:第一种方式:每个Bean都有一个代理第二种方式:所有Bean共享一个代理基类第三种方式:使用拦截器第四种方式:使用tx标签配置的拦截器第五种方式:在service层的方法上面用@Transactional()注解进行事物的设置 常用的两种: 声明式事物和编程式事物 1.声明式 这种方法不需要对原有的业务做任何修改,通过在XML文件中定义需要拦截方法的匹配即可完成配置,要求是,业务处理中的方法的命名要有规律,…
1. Spring的IoC容器和IoC Service Provider的关系 Spring的IoC容器和IoC Service Provider所提供的服务之间存在一定的交集,二者的关系如图4-1所示. 2. Spring提供了两种容器类型:BeanFactory和ApplicationContext.  BeanFactory. 基础类型IoC容器,提供完整的IoC服务支持.如果没有特殊指定,默认采用延迟初始化策略(lazy-load). 只有当客户端对象需要访问容器中的某个受管对象的时候…
应用启动的时候失败,看了下异常,是这个---NoUniqueBeanDefinitionException. 大家都知道,这是因为有俩个类型相同的实例,在被注入的时候,spring不知道该用哪个. 但是,我们都知道,一个向spring注册的bean,他的名字默认是这个类的shortclassname,然后对第一个字母小写.在使用的时候,使用@Resource注解,会先用这个字段的命名作为bean的name去spring里找.看了下,代码里完全遵守了这个规则,但是还是报错,所以到spring内部一…