Spring 基础教程之四:JavaBean基本配置详解
来源:互联网 发布:重生之星际淘宝主微盘 编辑:程序博客网 时间:2024/05/17 06:16
一:xml 装配JavaBean属性含义:
1.id:指定该Bean 的唯一标识。
2.class:指定该Bean 的全限定名。
3.name:为该Bean 指定一到多个别名。多个别名可以用“,”和“;”分割。
4autowire:指定该Bean 的属性的装配方式。
所谓自动装配是指在<BEAN>标签中不用指定其依赖的BEAN,而是通过配置的自动装配来自动注入依赖的BEAN,这种做法让我们的配置更加简单
1)no:不使用自动装配。必须通过ref 元素指定依赖,这是默认设置。由于显式指定协作者可以使配置更灵活、更清晰,因此对于较大的部署配置,推荐采用该设置。而且在某种程度上,它也是系统架构的一种文档形式。
<span style="font-size: 18px;"><bean id="bean1" class="cn.csdn.service.Bean1"scope="singleton"><property name="studentDaoImpl"ref="studentDaoImpl"></property></bean></span>
备注:有property 属性指定ref
2)byName:根据属性名自动装配。此选项将检查容器并根据
名字查找与属性完全一致的bean,并将其与属性自动装配。例如,在
bean 定义中将autowire 设置为by name,而该bean 包含master 属性(同时提供setMaster(..)方法),Spring 就会查找名为master 的bean 定义,并用它来装配给master 属性。
<bean id="bean1" class="cn.csdn.service.Bean1"
scope="singleton" autowire="byName"/>
备注:没有property 属性
3)byType:如果容器中存在一个与指定属性类型相同的
bean,那么将与该属性自动装配。如果存在多个该类型的bean,那么
将会抛出异常,并指出不能使用byType 方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。如果你不希望这样,那么可以通过设置dependency-check="objects"让Spring 抛出异常。
备注:spring3.0 以上不抛异常。
<bean id="bean1" class="cn.csdn.service.Bean1"
scope="singleton" autowire="byType"/>
备注:没有property 属性
4)Constructor:与byType 的方式类似,不同之处在于它应用
于构造器参数。如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。
<bean id="bean1" class="cn.csdn.service.Bean1"
scope="singleton"autowire="constructor"/>
备注:没有property 属性
5)autodetect:通过bean 类的自省机制(introspection)来决定是使用constructor 还是byType 方式进行自动装配。如果发现默认的
构造器,那么将使用byType 方式。
<bean id="bean1" class="cn.csdn.service.Bean1"
scope="singleton" autowire="autodetect"/>
5.scope:指定该Bean 的生存范围
scope用来声明IOC容器中的对象应该处的限定场景或者说该对象的存活空间,即在IOC容器在对象进入相应的scope之前,生成并装配这些对象,在该对象不再处于这些scope的限定之后,容器通常会销毁这些对象。
1) singleton类型的bean定义,在一个容器中只存在一个实例,所有对该类型bean的依赖都引用这一单一实例
2) scope为prototype的bean,容器在接受到该类型的对象的请求的时候,会每次都重新生成一 个新的对象给请求方,虽然这种类型的对象的实例化以及属性设置等工作都是由容器负责的,但是只要准备完毕,并且对象实例返回给请求方之后,容器就不在拥有 当前对象的引用,请求方需要自己负责当前对象后继生命周期的管理工作,包括该对象的销毁
3) request ,session和global session
这三个类型是spring2.0之后新增的,他们只适用于web程序,通常是和XmlWebApplicationContext共同使用
request:
<bean id ="requestPrecessor" class="...RequestPrecessor" scope="request" />
Spring容器,即XmlWebApplicationContext 会为每个HTTP请求创建一个全新的RequestPrecessor对象,当请求结束后,,该对象的生命周期即告结束
session
<bean id ="userPreferences" class="...UserPreferences" scope="session" />
Spring容器会为每个独立的session创建属于自己的全新的UserPreferences实例,他比request scope的bean会存活更长的时间,其他的方面真是没什么区别。
global session:
<bean id ="userPreferences" class="...UserPreferences" scope="globalsession" />
global session只有应用在基于porlet的web应用程序中才有意义,他映射到porlet的global范围的session,如果普通的servlet的web 应用中使用了这个scope,容器会把它作为普通的session的scope对待。
6.init-method:指定该Bean 的初始化方法。destroy-method:指定该Bean 的销毁方法。这个就像servlet中init和destroy方法一样,只不过这里在配置文件配置的
7.abstract:指定该Bean 是否为抽象的。如果是抽象的,则
spring 不为它创建实例。
8.parent
如果两个Bean 的属性装配信息很相似,那么可以利用继
承来减少重复的配置工作。
<!-- 装配Bean 的继承
父类作为模板,不需要实例化,设置abstract=”true”-->
` <bean id=”parent” class=”cn.csdn.service.Parent”
abstract=”true”>
<property name=”name” value=”z_xiaofei168”/>
<property name=”pass” value=”z_xiaofei168”/>
</bean>
<!-- 装配Bean 的继承
子类中用parent 属性指定父类标识或别名
子类可以覆盖父类的属性装配,也可以新增自己的属性装配
-->
` <bean id=”child” class=”cn.csdn.service.Chlid”
parent=”parent”>
<property name=”pass” value=”123123”/>
<property name=”age” value=”22”/>
</bean>
二:装配Bean 的各种类型属性值
1..简单类型属性值的装配
<bean id="bean1" class="cn.csdn.domain.Bean1"><property name="name" value="z_xiaofei168"/><property name="age"><value>22</value></property></bean>
2.引用其他Bean 的装配
<bean id="bean1" class="cn.csdn.domain.Bean1">...</bean><bean id="bean2" class="cn.csdn.domain.Bean2"><!-- 引用自其他Bean 的装配--><property name="bean1" ref="bean1"/></bean>
另外一种不常使用的配置方式是在property 元素中嵌入
一个bean 元素来指定所引用的Bean.
<bean id="bean1" class="cn.csdn.domain.Bean1">...</bean><bean id="bean2" class="cn.csdn.domain.Bean2"><!-- 引用自其他Bean 的装配--><property name="bean1"><bean id="bean1"class="cn.csdn.domain.Bean1"/></property></bean>
3.集合的装配
其实集合的装配并不是复杂,反而感觉到很简单,用一个例子来说明问题吧:
package com.bebig.dao.impl;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.Set;import com.bebig.dao.UserDAO;import com.bebig.model.User;public class UserDAOImpl implements UserDAO { private Set<String> sets; private List<String> lists; private Map<String, String> maps; private Properties props; public Set<String> getSets() { return sets; } public void setSets(Set<String> sets) { this.sets = sets; } public List<String> getLists() { return lists; } public void setLists(List<String> lists) { this.lists = lists; } public Map<String, String> getMaps() { return maps; } public void setMaps(Map<String, String> maps) { this.maps = maps; } public Properties getProps() { return props; } public void setProps(Properties props) { this.props = props; } public void save(User u) { System.out.println("a user saved!"); } @Override public String toString() { return "sets.size:" + sets.size() + " lists.size:" + lists.size() + " maps.size:" + maps.size() + " props.size:" + props.size(); }}
配置如下:
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" > <!-- a service object; we will be profiling its methods --> <bean name="u" class="com.bebig.dao.impl.UserDAOImpl"> <!-- set --> <property name="sets"> <set> <value>1</value> <value>2</value> </set> </property> <!-- list --> <property name="lists"> <list> <value>a</value> <value>b</value> </list> </property> <!-- map --> <property name="maps"> <map> <entry key="1" value="aa"></entry> <entry key="2" value="bb"></entry> </map> </property> <!-- properties --> <property name="props"> <props> <prop key="a">haha</prop> <prop key="b">hi</prop> </props> </property> </bean> <bean id="userService" class="com.bebig.service.UserService" scope="prototype"> <constructor-arg> <ref bean="u" /> </constructor-arg> </bean> <!-- this switches on the load-time weaving --> <!-- <context:load-time-weaver /> --></beans>
- Spring 基础教程之四:JavaBean基本配置详解
- Spring 基础教程之三:JavaBean生命周期
- Spring(四)利用注解实现spring基本配置详解
- Firebreath基础教程之四:基本编程
- Java程序员从笨鸟到菜鸟之(七十二)细谈Spring(四)利用注解实现spring基本配置详解
- Java程序员从笨鸟到菜鸟之(七十二)细谈Spring(四)利用注解实现spring基本配置详解
- Spring(四)JavaBean作用范围的配置及生命周期
- Spring事务之四(Spring声明式事务基本配置)
- Spring之初识JavaBean
- Spring学习之Spring 配置(四)
- 四.Spring之使用注解配置Spring
- spring基本配置详解(属性bean的基本配置)
- 利用注解实现spring基本配置详解
- Sprinp-IOC和spring基本配置详解
- 利用注解实现spring基本配置详解
- 利用注解实现spring基本配置详解
- spring 用JavaBean 配置List
- Spring之依赖配置详解
- windows游戏编程<四>X86 32位保护模式下的内存管理概述(一)
- 链表初解(二)——双链表的创建、删除、插入
- android中Handler的初步认识(一)
- ajax是否能跨域请求,解决的办法
- c++中const 的用法
- Spring 基础教程之四:JavaBean基本配置详解
- URL重写的实现
- 关于构造函数 c++
- poj3624-我的第一道01背包水题
- 解析xml的几种方法,他们的原理,比较 以及JAVA源码
- SQLServer游标指南
- Linux查看CPU和内存使用情况
- 黑马程序员 java基础—单例设计模式
- 开始写博客啦!!!!