xml形式装配bean——spring in action chapter 2

原创 2015年11月18日 09:39:54

1、声明bean

利用beans命名空间:

<beans xmlns=....>      <bean id = "beanId"     class="com.beanClass" /> </beans>

当spring容器加载该bean时,spring将调用默认的构造器实例化beanClass,相当于 new beanClass();
可以这样加载application context:

ApplicationContext ctx = new
ClassPathXmlApplicationContext(“com/test/spring-demo.xml”);
beanClass beanDemo = ctx.getBean(“beanId”);
beanDemo.go();

BeanFactory是最基本最简单的spring容器,提供最基本的DI支持,我们这里用的是高级的spring容器——ApplicationContext,它基于BeanFactory之上构建,并提供面向应用的服务,比如可以从FileSystem、ClassPath、Web读取xml配置。

2、注入

构造器注入:

<bean id="poeticDuke" class="....">
    <constructor-arg value="15"/>
    <constructor-arg ref="otherBeanId">
<bean>

工厂方法创建bean:

<bean id="theStage" calss="..." factory-method="getInstance" />

3、bean的作用域

<bean id="" class="" scope="prototype"/>

默认是singleton,注意这里的单例仅限于spring applicationContext范围内;真正的单例要求每个类加载器只有一个实例,而spring的单例bean只是保证是每个application context中只有一个该bean的实例。当然,你可以用传统方式再new一个该bean,甚至定义几个声明来实例化同一个bean;
prototype:每次调用都创建一个新的实例;
request和session仅在基于web的上下文中才有用,如spring mvc中,分别表示在每次http请求和每次http session中都创建一个实例。

4、初始化和销毁bean

<bean id="" class="" init-method="turnOnLights" destroy-method="turnOffLights" />

如果该application context中很多bean都有相同名字的init和destroy方法,可以在beans中设置属性统一设置:

<beans xmlns=...    default-init-method="turnOn" default-destroy-method="turnOff" ></beans>

另外,也可以通过让bean分别实现spring的InitializingBean和DisposableBean接口来定义初始化和销毁方法,这样spring能够自动检测实现了这些接口的bean,而无需额外的配置;但是,这样会使bean与spring的api产生耦合,所以强烈不建议这样,除非你是开发一个明确地只在spring容器内使用的框架bean;

5、setter方法注入

<bean id="" class="" >
    <property name="" value="" />
    <property name="" ref="anotherBeanId" />
    <property name="" ><bean class=""/></property>
</bean>

也可以使用命名空间p装配,需在beans中声明xmlns:p,用法如下:

<bean id="" class="" p:propName1="literalValue" p:propName2-ref="anotherBeanId" />

也可以装配集合,spring提供的集合配置元素有:
list 允许重复
set 不允许重复
map 装配任意类型的key-value
props 只能装配string-to-string
数组和任意java.util.Collection的实现,都可以用list和set进行装配,只是是否有重复需要注意。
装配list和set:

<bean id="" class="">
    <property name="instruments">
        <list>
            <ref bean="guitar" />
            <ref bean="cymbal" />
        </list>
    </property>
</bean>

装配map:

<bean id="" class="">
    <property name="">
        <map>
            <entry key="" value="">
            <entry key="" value-ref="">
            <entry key-ref="" value="">
            <entry key-ref="" value-ref="">
        </map>
    </propety>
</bean>

装配properties:

<bean id="" class="">
    <property name="">
        <props>
            <prop key="">value1</prop>
            <prop key="">value2</prop>
        </props>
    </property>
</bean>

装配null:

<bean id="" class="">
    <property name=""><null/></propety>
</bean>

6、用SpEL装配

<property name="" value="#{literalValue}"/>
<property name="" value="#{anotherBeanId}"/>
<property name="" value="#{anotherBeanId.valueA}"/>
<property name="" value="#{aBeanId.methodA()}" />
<property name="" value="#{aBeanId.methodA().toUpperCase()}" />
<property name="" value="#{aBeanId.methodA()?.toUpperCase()}" />
<property name="" value="#{T(java.lang.Math).random()}"/>
<property name="circumference" value="#{2*T(java.lang.Math).PI * circleBeanId.radius}" />
<property name="fullName" value="#{performer.firstName + '' + performer.lastName}" />
<property name="isBig" value="#{counter.total gt 100000}" />
<property name="outOfStock" value="#{!product.avaliable}" />
<property name="outOfStock" value="#{not product.avaliable}" />
<property name="instrument" value="#{kenny.song != null ? kenny.song : 'anotherSongName'}" />
<property name="instrument" value="#{kenny.song ?: 'anotherSongName'}" />
<property name="isEmail" value="#{admin.email matches 'regExp'}" />

SpEL对集合筛选操作:
通过util:list定义一个City的List集合:

<util:list id="cities">
    <bean class="com.demo.City" p:name="" p:state="" p:population="">
    <bean class="com.demo.City" p:name="" p:state="" p:population="">
    <bean class="com.demo.City" p:name="" p:state="" p:population="">
    <bean class="com.demo.City" p:name="" p:state="" p:population="">
</util:list>

访问集合成员:

<property name="" value="#{cities[2]}" />
<property name="" value="#{cities['Chicago']}" />
<property name="" value="#{cities[T(java.lang.Math).random() * cities.size()]}" />
<property name="bigCities" value="#{cities.?[population gt 100000]}" />
<property name="firstBigCity" value="#{cities.^[population gt 100000]}" />
<property name="lastBigCity" value="#{cities.$[population gt 100000]}" />

投影:

<property name="cityNames" value="#{cities.![name]}" />
<property name="cityNames" value="#{cities.![name+',    '+state]}" />
<property name="bigCityNames" value="#{cities.?[population gt 100000].![name+', '+state}" />

这里没有深入探究SpEL,仅供了解。因为SpEL最终是一个字符串,不易于测试,也不支持IDE的语法检查,过多使用会造成危险。
注意,不要被SpEL迷惑!要抵抗SpEL的诱惑,不要把过多的逻辑放入SpEL表达式中!

spring装配Bean(基于xml)

装配Bean(基于xml) 一、实例化方式 1、默认构造   必须提供默认构造 l  在spring容器中配置 ...
  • CSDN_GIA
  • CSDN_GIA
  • 2017年01月25日 22:51
  • 523

Spring装配bean的三种方法:自动化装配,java代码装配,XML装配及它们的混合使用

一、自动化装配        首先,把可能被装配的类声明为组件类,告知spring要为这个类创建bean如:                     import org.springframewor...
  • qq_37372007
  • qq_37372007
  • 2017年07月31日 00:38
  • 298

Spring装配Bean——通过配置XML装配bean

在这里,我仍旧直接通过例子来解释怎么通过xml装配bean。 xml version="1.0" encoding="UTF-8"?> xmlns="http://www.springf...
  • m0_37630602
  • m0_37630602
  • 2017年04月18日 16:10
  • 181

简化Spring的XML配置(二)——使用注解装配bean

从Spring2.5开始,Spring开始支持使用注解的方式来自动装配bean的属性。这种方式与XML里面配置方式相比,减少了代码量,更加方便快捷。如果想用注解来配置bean,首先要做的就是在XML文...
  • Trigl
  • Trigl
  • 2016年01月10日 13:53
  • 2919

【Spring】装配Bean-(1)-使用XML配置

Spring配置
  • robinjwong
  • robinjwong
  • 2014年05月11日 23:18
  • 5925

Spring - 装配Bean:即依赖注入

装配Bean:即依赖注入在Spring中,对象间的协作是通过IoC机制完成的。反向控制也叫依赖注入(Dependency Injection,DI),简单来说就是将JavaBean需要的对象通过配置文...
  • LeosHope
  • LeosHope
  • 2007年10月30日 22:15
  • 5357

Spring的《XML显式装配bean》之通过构造器注入Bean

本文主要讲解两点: 1.怎么样声明一个bean 2.通过构造器注入bean 1. 怎么样声明一个bean?1) 创建一个类:package spring.ch1.topic5;public...
  • u010853261
  • u010853261
  • 2017年01月21日 16:10
  • 552

Spring的三种装配Bean的方式

Spring的三种装配Bean的方式   一.自动扫描+自动装配 适用情况:简单bean,初始化不需要基本bean之外的其他参数,无参构造函数或者仅需要其他bean,如果需要其他bean作为属性...
  • java_hxc_sz
  • java_hxc_sz
  • 2017年02月04日 16:43
  • 675

【spring】1、三种装配bean的方式

【spring】1、三种装配bean的方式 创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入(DI)的本质 spring有如下三种装配bean的方法 在XML中进行显式配置 在Ja...
  • u011719271
  • u011719271
  • 2016年12月14日 23:51
  • 3624

spring--装配bean

众所周知,spring最基本的功能就是用来管理bean,spring为我们提供了三种装配bean的方式: 1. XML显式配置 2. Java显式配置 3. 组件扫描和自...
  • xingtingshu
  • xingtingshu
  • 2016年08月20日 14:35
  • 741
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:xml形式装配bean——spring in action chapter 2
举报原因:
原因补充:

(最多只允许输入30个字)