Spring组件

 

Spring 组件

      Spring3.0以后的版本和以前的版本开发包组织方式不同了,官方也不将其依赖包一并包含在其中,要想使用,就必须需要下载相应的依赖包:


 Spring核心就是以Bean为中心构建的一个Bean关系网,对Bean进行解析,创建,通过Bean将其它框架整合进来,进而以Bean的方式来访问。

 诚如上图所示,用红线画出的就是Spring的核心组件,即: Core、Context、beans 。而其余特性jms、orm、aop等都是以该三个核心组件为基础实现扩展的。

三大核心组件的协同工作主要表现在 :Bean是包装我们应用程序自定义对象Object的,Object中存有数据,而Context就是为了这些数据存放提供一个生存环境,保存各个bean之间的对应关系,并且维护好这些对应关系。Context就是一个Bean关系的集合,也就是我们所谓的IOC容器。Core就是Context在发现、建立、维护Bean之间关系所需要的一些工具,如资源的加载,资源的抽象等。

  1. Bean组件
    这个包下的所有类主要解决了三件事:Bean的定义、Bean 的创建以及对Bean的解析。对Spring的使用者来说唯一需要关心的就是Bean的创建,其他两个由Spring在内部帮你完成了,对你来说是透明的。
    BeanFactory有三个子类:ListableBeanFactory、HierarchicalBeanFactory和Autowire Capable Bean Factory。但是最终的默认实现类是DefaultListableBeanFactory,他实 现了所有的接口。那为何要定义这么多层次的接口呢?查阅这些接口的源码和说明发现,每个接口都有他使用的场合,它主要是为了区分在Spring内部在操作过程中对象的传递和转化过程中,对对象的 数据访问所做的限制。例如ListableBeanFactory接口表示这些Bean是可列表的,而HierarchicalBeanFactory表示的是这些Bean是有继承关系的,也就是每个Bean有可能有父Bean。 AutowireCapableBeanFactory接口定义Bean的自动装配规则。这四个接口共同定义了Bean的集合、Bean之间的关系、以及Bean行为。
  2. Context组件
     Context组件就是为Bean对象提供一个运行时环境,标识一个运行时环境,初始化BeanFactory,利用BeanFactory来将解析注册的Bean进行创建,保存Bean对象之间的关系。Context可以说是将Core和Bean两个组件融合在一起了。Context组件的根级组件是ApplicationContext,既继承了BeanFactory,同时又继承了Core中的Resource类。
  3.  Core组件
    Core组件主要就是定义了访问资源的方式,以及对于各种资源进行用统一的接口来抽象,屏蔽了具体资源的类型。资源的顶级接口为Resource,它继承自InputStreamResource,实现了其getInstream方法,这样所有的资源就是通过该方法来获取输入流的。对于资源的加载,也实现了统一,定义了一个资源加载顶级接口 ResourceLoader,它默认的加载就是DefaultResourceLoader。
Spring 对象生命周期
  1. singleton  
    当一个bean的作用域为singleton, 那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。Singleton作用域是Spring中的缺省作用域,配置如下:
<bean id="accountService" class="com.foo.DefaultAccountService"/>  
<!-- the following is equivalent, though redundant (singleton scope is the default); using spring-beans-2.0.dtd  or upper-->  
<bean id="accountService" class="com.foo.DefaultAccountService" scope="singleton"/>  
  
<!-- the following is equivalent and preserved for backward compatibility in spring-beans.dtd -->  
<bean id="accountService" class="com.foo.DefaultAccountService" singleton="true"/>  

测试代码如下所示:

public class SpringTest {  
  
@Test   
public void instanceSpring(){  
        ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");  
       PersonService personService1 = (PersonService)ctx.getBean("accountService");  
       PersonService personService2 = (PersonService)ctx.getBean("accountService");  
        System.out.println(personService1==personService2);  
    }  
}  

 

扫描二维码关注公众号,回复: 602564 查看本文章
     2.  Prototype作用域

猜你喜欢

转载自zqj15011.iteye.com/blog/2314600