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 in action 03 -- 装配 Bean(xml配置)

在上一篇中,遇到了一些问题,其实这些问题,是因为对Spring不熟悉,用的太少才会有的问题,我觉得有一些是理解上的问题,这一篇说通过XML装配bean, 有这么一句话:bean元素类似于javaco...
  • stanxl
  • stanxl
  • 2016年05月29日 23:21
  • 402

Spring In Action(二):基于XML配置装配bean

虽然项目中常用的是通过注解的方式装配bean,但是XML文件配置作为最初的配置方式,对于Spring学习者来说,还是很有必要了解一下的。...

Spring in action 学习(2)创建Bean

2种方式-BeanFactory XMLBeanFactory(newFileSystemResource..) -ApplicationContext ClassPathXmlApp...

Spring Boot in Action-chapter 2 sample

  • 2016年09月13日 14:40
  • 2.52MB
  • 下载

Spring in action 01 -- 装配 Bean(@Autowired)

昨天走马观花,看一遍Spring,当然也比较的片面,今天就从第一个知识点详细些再学习。温故而知新,可以为师也,如此而而一个概念 装配(wiring) : 创建应用对象之间协作关系的行为通常称为装配。它...
  • stanxl
  • stanxl
  • 2016年05月29日 18:40
  • 442

Spring in Action入门之装配管理Bean

(该部分是Spring的入门和Spring容器装配管理Bean的方法)第一章 开始Spring之旅Applet可以用来创建动态的Web应用,在html文件中通过标识,一种已经被淘汰的技术。...

Spring In Action(一):基于注解装配bean

@Component注解,将一个类作为组件 1.创建一个Spring项目,修改pom文件,添加Spring单元测试所需依赖 ...

《Spring in Action》第二章--自动化装配bean+音响系统例子的实现

实验环境: 1、eclipse开发工具 https://www.eclipse.org/downloads/ 2、Java JDK(IDE有自己的编译环境,所以只需安装JRE即可) http...

Spring In Action 01 ---装配Bean

上一章可以说是对Spring的大概介绍,这一节将会详细介绍Spring中对于bean的装配细节,也就是填充也就是注入。在Spring中,对象无需自己查找创建与其相关的其他对象,相反,容器负责把需要相互...

《Spring In Action》 读书笔记(1) -- bean装配

这是我第一本java类的书,在学SSH的时候,感觉spring是最没用的,然而现在实习快一年了,现在才发现spring的精妙,决定看本书来更了解下spring,这两天学习bean装配,别看内容简单,其...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:xml形式装配bean——spring in action chapter 2
举报原因:
原因补充:

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