對(duì)于spring框架其實(shí)不必說(shuō)太多 就是基于java平臺(tái) 可以讓你快速構(gòu)建應(yīng)用的支持架構(gòu),spring解決了一些結(jié)構(gòu)問(wèn)題 所以你可以把心思花在 業(yè)務(wù)應(yīng)用上 。
"plain old Java objects" (POJOs) 這個(gè)需要深刻體會(huì)和理解。
2.1說(shuō)到了依賴注入和控制反轉(zhuǎn)
好多人認(rèn)為依賴注入和控制反轉(zhuǎn)是一回事,我卻不這么認(rèn)為,覺(jué)得有了控制反轉(zhuǎn) 才會(huì)有依賴注入 ,就是大家把bean的管理交給了spring 所以在用的時(shí)候才能隨心注入到需要用的地方 不知道這么講合適不合適。
2.2 Modules
關(guān)于spring的20個(gè)模塊 估計(jì)都曉得了
2.2.1 Core Container
The Core Container consists of the spring-core, spring-beans, spring-context, spring-context-support, and spring-expression (Spring Expression Language) modules.
依賴注入和控制反轉(zhuǎn) 基本由 spring-core和spring-beans這兩個(gè)jar包提供
BeanFactory是spring-bean模塊非常重要的接口 是 Spring bean container 最上層的接口 ,其中類介紹中還有這么一句話 BeanFactory is a central registry of application components 說(shuō)明這個(gè)是應(yīng)用bean的注冊(cè)中心。and centralizes configuration of application components 也是應(yīng)用的配置中心
BeanFactory will load bean definitions stored in a configuration source (such as an XML document) BeanFactory 將加載配置文件中的資源 例如xml 其實(shí).properties文件之類的也都是會(huì)加載的
該接口定義了一個(gè)屬性
String FACTORY_BEAN_PREFIX = "&";
英文介紹是:
/**
* Used to dereference a {@link FactoryBean} instance and distinguish it from
* beans <i>created</i> by the FactoryBean. For example, if the bean named
* {@code myJndiObject} is a FactoryBean, getting {@code &myJndiObject}
* will return the factory, not the instance returned by the factory.
*/
我理解的大致意思是 作為引用這個(gè)實(shí)例 和區(qū)分由FatoryBean創(chuàng)建的beans
例如:一個(gè)被factoryBeanbean的名字是myJndiObject 獲取的時(shí)候 &myJndiObject是這個(gè)對(duì)象本身 而不是這個(gè)對(duì)象的引用。不知道我這么理解是否正確?
Object getBean(String name) throws BeansException;
這個(gè)很好理解了 返回Object 其實(shí)是所有對(duì)象的父類
<T> T getBean(String name, Class<T> requiredType) throws BeansException;
<T> T getBean(Class<T> requiredType) throws BeansException;
返回泛型 主要由于參數(shù)Class<T> requiredType決定的 所以返回你需要的類型
Object getBean(String name, Object... args) throws BeansException;
<T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
這些都類似
boolean containsBean(String name);
boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
這些都比較好理解 是判斷bean
Class<?> getType(String name) throws NoSuchBeanDefinitionException;
返回類型
String[] getAliases(String name);
返回別名 因?yàn)閎ean可以配置別名的。
其實(shí)大家這會(huì)可能要好奇了 不是說(shuō)是注冊(cè)中心嗎 為什么沒(méi)有set之類的
其實(shí)這也是我一直好奇的 不過(guò)可以在子類中找到 DefaultListableBeanFactory
里面會(huì)有好多map 這個(gè)等碰到的時(shí)候再講吧 至于為什么不在接口中 我們后續(xù)再分析吧