bean的配置

一.采用xml(反射)注入bean
< bean  id ="helloWorld"  class ="HelloWorld" >

</bean>
id是bean的唯一表示
class是bean的全类名,通过反射的方式在ioc容器中创建bean,要求bean中必须有无参构造器


ApplicationContext ctx =  new ClassPathXmlApplicationContext( "applicationContext.xml");
HelloWorld helloWorld = (HelloWorld) ctx.getBean( "helloWorld");
helloWorld.hello();
Spring提供两种ioc的实现方式
--BeanFactory  ioc容器的基本实现
     是Spring框架的基础设施,面向Spring本身

--ApplicationContext提供了更多的高级特性,是BeanFactory的子接口
     面向开发者,几乎所有的应用场合都直接使用ApplicationContext而非底层的BeanFactory
无论使用何种方式,配置文件时都相同

ApplicationContext的继承结构:


ApplicationContext有两个主要的实现类:
--ClassPathXmlApplicationContext  从类路径下加配置文件
--FileSystemXmlApplicationContext 从文件系统中加载配置文件
两个实现类都是实现了ConfigurableApplicationContext接口
ConfigurableApplicationContext扩展了ApplicationContext,新增加了两个重要的方法refresh()和close(),使ApplicationContext具有启动、刷新和关闭上下文的功能
ApplicationContex在初始化上下文时就实例化所有的单例的bean
WebApplicationContex web专用类


ApplicationContext使用getBean(String str) 方法调用实例
方法由BeanFactory接口定义   ApplicationContext接口继承


二、依赖注入的方式
Spring支持3种依赖注入的方式
--属性注入
< bean  id ="helloWorld"  class ="HelloWorld" >
    < property  name ="name"  value ="helloWord" ></ property >
</ bean >
     属性注入即通过setter方法注入Bean的属性值或依赖的对象
     属性注入使用<property>元素,使用name属性指定Bean的属性名称,value属性或<value>子节点指定Bean
     属性注入是实际应用中最常用的注入方式
--构造器注入
< bean  id ="car"  class ="Car" >
    < constructor-arg  value ="Audi"  index ="0"  type ="java.lang.String" ></ constructor-arg >
    < constructor-arg  value ="ShangHai"  index ="1"  type ="java.lang.String" ></ constructor-arg >
    < constructor-arg  value ="300000"  index ="2"  type ="int" ></ constructor-arg >
</ bean >
     通过构造方法注入Bean的属性值或依赖对象,他保证了Bean实例在实例化后就可以使用
     构造器注入在<constructor-arg>元素里声明属性,index属性用来标识参数位置,type属性用来表示参数类型,以区分重载的构造器。<constructor-arg>中没有name属性
<constructor-arg index="1" type="java.lang.String">
    <value><![CDATA[<shangHai^>]]></value>
</constructor-arg>
     特殊字符使用<![CDATA[  ]]>进行注入
--工厂方法注入

二、建立Bean之间的引用关系
--使用ref属性
< bean  id ="person"  class ="Person" >
    < property  name ="name"  value ="Tom" ></ property >
    < property  name ="age"  value ="24" ></ property >
    < property  name ="car"  ref ="car" ></ property >
</ bean >
     使用ref属性可以引用其他的bean进行注入,建立引用关系
--使用内部bean
< bean  id ="person"  class ="Person" >
    < property  name ="name"  value ="Tom" ></ property >
    < property  name ="age"  value ="24" ></ property >
    < property  name ="car" >
        < bean  class ="Car" >
            < constructor-arg  value ="Ford" ></ constructor-arg >
            < constructor-arg  value ="changAn" ></ constructor-arg >
            < constructor-arg  value ="200000" ></ constructor-arg >
        </ bean >
    </ property >
</ bean >
     内部bean,不能被外部应用,只能在内部使用

三、进行级联赋值
< bean  id ="person"  class ="Person" >
    < property  name ="name"  value ="Tom" ></ property >
    < property  name ="age"  value ="24" ></ property >
    < property  name ="car"  ref ="car" ></ property >
    < property  name ="car.maxSpeed"  value ="250" ></ property >
</ bean >
     使用属性.属性的方式进行级联赋值,在car为创建的时候无法为其属性赋值(属性需要先初始化后才可以为级联属性赋值,否则会有异常 )

四、配置集合属性
< bean  id ="collectionPerson"  class ="collection.Person" >
    < property  name ="name"  value ="Mike" ></ property >
    < property  name ="age"  value ="27" ></ property >
    < property  name ="car" >
        < list >
            < ref  bean ="collectionCar" ></ ref >
        </ list >
    </ property >
</ bean >
     在Spring中可以通过一组内置的Xml标签(比如:<list>,<set>,<map>)来配置集合属性
     配置List类型的属性,需要制定<list>标签,在标签里包含一些元素,这些标签可以通过<value>指定简单的常量值,通过<ref>指定对其他Bean的引用,通过<bean>指定内置Bean定义,甚至可以内嵌其他集合
     数组的定义和List一样,都使用<list>

五、配置Map和Properties属性
< bean  id ="personMap"  class ="collection.PersonMap" >
    < property  name ="name"  value ="Rose" ></ property >
    < property  name ="age"  value ="28" ></ property >
    < property  name ="car" >
        < map >
            < entry  key ="baoMa"  value-ref ="collectionCar" ></ entry >
        </ map >
    </ property >
</ bean >
     Map通过<map>标签定义,<map>标签里可以使用多个<entry>作为子标签,每个条目包含一个键和一个值
< bean  id ="dataSource"  class ="collection.DataSource" >
    < property  name ="properties" >
        < props >
            < prop  key ="user" >root </ prop >
            < prop  key ="password" >1234 </ prop >
        </ props >
    </ property >
</ bean >
     使用<props>定义Properties,该标签使用多个<prop>作为子标签,每个<prop>标签必须定义key属性
    
六、使用utility scheme定义集合
xmlns: util ="http://www.springframework.org/schema/util"
xsi :schemaLocation ="http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd" >
< util :list  id ="cars" >
    < ref  bean ="collectionCar" ></ ref >
</ util :list >
     使用基本的集合标签定义集合时,不能将集合作为独立的Bean定义,导致其他Bean无法引用该集合,所以无法在不同的Bean之间共享集合
     必须在<beans>中定义添加util schema定义
     使用ref元素调用

七、使用p命名空间简化bean的赋值
xmlns: p ="http://www.springframework.org/schema/p"

< bean  id ="PersonP"  class ="collection.Person"
      p :age ="30"  p :name ="Queen"  p :car-ref ="collectionCar" ></ bean >
     必须在<beans>中添加p定义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值