`

Spring基础知识(二)

阅读更多
参阅:Spring Framework 开发参考手册

(spring2.0-reference_final_zh_cn.chm) 
第三部分:Spring核心技术

一、容器和bean的基本原理

1、Spring中的bean概念

在Spring中,那些组成应用的主体(backbone)及由Spring IoC容器所管理的对象被称之为bean。简单地讲,bean就是由Spring容器初始化、装配及被管理的对象,除此之外,bean就没有特别之处了(与应用中的其他对象没有什么区别)。而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。

1、  容器
org.springframework.beans及org.springframework.context包是Spring IoC容器的基础。BeanFactory提供的高级配置机制,使得管理任何性质的对象成为可能。ApplicationContext是BeanFactory的扩展,功能得到了进一步增强,比如更易与Spring AOP集成、消息资源处理(国际化处理)、事件传递及各种不同应用层的context实现(如针对web应用的WebApplicationContext)。

org.springframework.beans.factory.BeanFactory是Spring IoC容器的实际代表者,IoC容器负责容纳此前所描述的bean,并对bean进行管理。在Spring中,BeanFactory是IoC容器的核心接口。它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。Spring为我们提供了许多易用的BeanFactory实现,XmlBeanFactory就是最常用的一个。该实现将以XML方式描述组成应用的对象以及对象间的依赖关系。XmlBeanFactory类将持有此XML配置元数据,并用它来构建一个完全可配置的系统或应用。 3、接口选择之惑
在实际应用中,用户有时候不知道到底是选择BeanFactory接口还是ApplicationContext接口。但是通常在构建J2EE应用时,使用ApplicationContext将是更好的选择,因为它不仅提供了BeanFactory的所有特性,同时也允许使用更多的声明方式来得到我们想要的功能。

 
4、配置元数据

       Spring支持三种配置元数据格式:XML格式、Java属性文件格式或使用Spring公共API编程实现。由于XML元数据配置格式简单明了,故常采用该格式来表达Spring IoC容器的主要理念和特性。

 
5、实例化容器的方法

A:FileSystemResource

Resource resource = new FileSystemResource("beans.xml");
BeanFactory factory = new XmlBeanFactory(resource);

B:ClassPathResource(同A)

C:ClassPathXmlApplicationContext

ApplicationContext context = new ClassPathXmlApplicationContext(        new String[] {"applicationContext.xml", "applicationContext-part2.xml"});// of course, an ApplicationContext is just a BeanFactory
BeanFactory factory = (BeanFactory) context;

 
6、实例化bean的方法

A:用构造器来实例化

B:使用 静态工厂方法实例化

<bean id="exampleBean"   class="examples.ExampleBean2"
      factory-method="createInstance"/>

C:使用实例工厂方法实例化

<bean id="myFactoryBean" class="...">  ...</bean><bean id="exampleBean"      factory-bean="myFactoryBean"
      factory-method="createInstance"/>

  
二、依赖

1、依赖注入(DI)主要有两种注入方式,即Setter注入和 构造器注入。

l         Setter注入:通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现基于setter的DI。

l         构造器注入:基于构造器的DI通过调用带参数的构造器来实现,每个参数代表着一个协作者。此外,还可通过给静态工厂方法传参数来构造bean。

 
2、如何在构造器注入和Setter注入之间进行选择?

       由于大量的构造器参数可能使程序变得笨拙,特别是当某些属性是可选的时候。因此通常情况下,Spring开发团队提倡使用setter注入。

尽管如此,构造器注入因为某些原因还是受到了一些人的青睐。一次性将所有依赖注入的做法意味着,在未完全初始化的状态下,此对象不会返回给客户代码(或被调用),此外对象也不可能再次被重新配置(或重新注入)。对于注入类型的选择并没硬性的规定。只要能适合你的应用,无论使用何种类型的DI都可以。对于那些没有源代码的第三方类,或者没有提供setter方法的遗留代码,我们则别无选择--构造器注入将是你唯一的选择。  
3、循环依赖

       当你主要使用构造器注入的方式配置bean时,很有可能会产生循环依赖的情况。

    对于此问题,一个可能的解决方法就是修改源代码,将构造器注入改为setter注入。另一个解决方法就是完全放弃使用构造器注入,只使用setter注入。

 
4、构造器参数的解析

l         构造器参数类型匹配
l         构造器参数的索引

注意:index属性值从0开始。指定构造器参数索引是使用构造器IoC首选的方式。

 
5、bean属性及构造器参数详解

       bean的属性及构造器参数既可以引用容器中的其他bean,也可以是内联(inline,在spring的XML配置中使用<property/>和<constructor-arg/>元素定义)bean。

(1)、直接量(基本类型、Strings类型等。)  <value/>元素

(2)、引用其它的bean(协作者)

       <ref bean="someBean"/>:可以引用同一容器或父容器内的任何bean(无论是否在同一XML文件中)。XML 'bean'元素的值既可以是指定bean的id值也可以是其name值。

       <ref local="someBean"/>:local属性值必须是目标bean的id属性值。如果在同一配置文件中没有找到引用的bean,XML解析器将抛出一个例外。

       <ref parent="accountService"/>:parent属性值既可以是目标bean的id值,也可以是name属性值。而且目标bean必须在当前容器的父容器中。使用parent属性的主要用途是为了用某个与父容器中的bean同名的代理来包装父容器中的一个bean。

(3)、内部bean

(4)、集合

(5)、Nulls:<null/>用于处理null值。Spring会把属性的空参数当作空字符串处理。以下的xml片断将email属性设为空字符串。

(6)、XML-based configuration metadata shortcuts 

       针对常见的value值或bean的引用,Spring提供了简化格式用于替代<value/>和<ref/>元素。<property/>、<constructor-arg/>及<entry/>元素都支持value属性(attribute),它可以用来替代内嵌的<value/>元素。

(7)、组合属性名称  <property name="fred.bob.sammy" value="123" /> 
6、使用depends-on

 
7、延迟初始化bean

 
8、自动装配(autowire)协作者

 
9、依赖检查

  
三、bean的作用域

 
四、定制bean特性

分享到:
评论

相关推荐

    Spring基础知识汇总 Java开发必看

    Spring基础知识汇总 Java开发必看

    Spring基础知识汇总Java开发必看

    以下是对Spring基础知识的详细讲解: 1. **依赖注入(Dependency Injection, DI)** 依赖注入是Spring的核心特性,它允许组件之间松耦合。通过容器管理对象的创建和对象之间的依赖关系,而不是在代码中硬编码依赖。...

    Spring基础知识详解

    下面将对Spring的基础知识进行详细的解释。 1. **依赖注入(Dependency Injection,DI)**:Spring的核心特性,它允许开发者通过外部配置来管理对象及其依赖关系,而不是在代码中硬编码这些依赖。这样可以提高代码...

    Spring基础教学视频

    ### Spring基础教学视频知识点概述 #### 一、Spring框架简介 - **定义**:Spring框架是一种轻量级的Java开发框架,它通过依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP...

    java及spring基础知识pdf

    资源包含如下: 1,JAVA_IO详解_包括讲解IO中各种流及其用法.pdf 2,Java集合排序及java集合类详解.pdf 3,JDBC入门电子书.pdf 4,Spring源代码解析.pdf 5,第三章 Servlet 最佳实践.pdf

    spring基础jar包.zip

    本文将深入探讨"spring基础jar包.zip"中的关键知识点,并解析这些jar包在Spring框架中的作用。 首先,我们要明确的是,"spring基础jar包.zip"主要是为了快速搭建Spring框架环境而准备的,其中包含了一系列Spring的...

    学习Spring必学的Java基础知识(含数据库事务基础知识)

    学习Spring必学的Java基础知识(含数据库事务基础知识)

    尚硅谷SpringCloud第二季笔记

    通过深入学习和实践【尚硅谷SpringCloud第二季笔记】中的内容,开发者可以掌握SpringCloud在后端服务治理中的实际运用,提升微服务架构设计和实施的能力,为构建高可用、高性能、可伸缩的云原生应用打下坚实基础。...

    spring3第二天笔记

    spring基础知识,适合初学者,包括Spring的AOP面相切面编程等内容

    spring知识点总结

    “知识点总结.xls”可能是一个整理好的Spring框架关键知识点的表格,可能包含了Spring的主要模块(如Core Container、Data Access/Integration、Web、AOP、Test等)、关键概念(如Bean、ApplicationContext、IoC容器...

    spring基础教程 spring基础教程

    本教程将深入探讨Spring的基础知识,帮助初学者快速掌握这一强大的框架。 一、Spring框架简介 Spring框架是于2003年推出的,由Rod Johnson发起,旨在简化企业级Java应用的开发。它是一个开源的Java平台,主要关注于...

    Spring入门基础知识带jar包

    Spring入门基础知识带jar包

    Spring 基础知识

    标题中的“Spring基础知识”指的是Spring框架的基本概念和核心特性,这是一个广泛使用的Java应用程序开发框架,尤其在企业级应用中非常流行。Spring框架以其依赖注入(Dependency Injection,DI)和面向切面编程...

    Spring的基础知识.pptx

    【Spring基础知识】 Spring是一个广泛使用的Java企业级应用程序框架,主要设计目的是降低模块间的耦合度,提供一种轻量级的开发方式。Spring的核心特性包括依赖注入(IoC)和面向切面编程(AOP)。它不仅关注业务层...

    spring基础开发的jar包

    这个"spring基础开发的jar包"是专门为Spring Web开发准备的,包含了一系列核心组件和依赖,使得开发者可以快速搭建一个功能完备的Spring MVC应用程序。在本文中,我们将深入探讨这些jar包中的关键知识点。 1. **...

    Spring 基础jar包

    下面我们将深入探讨Spring框架的一些核心知识点。 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一是依赖注入,它允许对象之间的关系在运行时被定义和管理,而不是在代码中硬编码。通过XML配置...

    spring知识框架详解

    2004年3月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版。 很难想象Rod Johnson的学历 , 他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学。 Spring理念 : 使现有技术更加实用 ....

    spring基础进阶技巧200篇.zip

    《Spring基础进阶技巧200篇》是一本关于Spring框架的资源,它提供了200篇文章,涵盖了Spring框架的基础知识和...这本资源适合已经具备一定Spring基础知识的开发人员,希望进一步深入学习和应用Spring框架的技术人员。

Global site tag (gtag.js) - Google Analytics