Spring 通过XML配置装配Bean
使用XML装配Bean需要定义对于的XML,需要引入对应的XML模式(XSD)文件,这些文件会定义配置Spring Bean的一些元素,简单的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> </beans>

创建角色类Role
类构造器有参与无参
代码:
Role:
package com.wbg.springxmlbean.entity;
public class Role {
private int id;
private String roleName;
private String note;
@Override
public String toString() {
return "Role{" +
"id=" + id +
", roleName='" + roleName + '\'' +
", note='" + note + '\'' +
'}';
}
public Role() {
}
public Role(int id, String roleName, String note) {
this.id = id;
this.roleName = roleName;
this.note = note;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
User:
package com.wbg.springxmlbean.entity;
public class User {
private int id;
private Role role;
@Override
public String toString() {
return "User{" +
"id=" + id +
", role=" + role +
", name='" + name + '\'' +
", age=" + age +
'}';
}
public Role getRole() {
return role;
}
public void setRole(Role role) {
this.role = role;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private String name;
private int age;
}

xml进行配置:
1、装备简易值
<!--
id:属性是Spring找到的这个Bean的编号,不是必须的,如果没有Spring会采用:
"全限定名#{number}"的格式生成编号
列如: <bean class="com.wbg.springxmlbean.entity.Role">
Spring会生成编号为:"com.wbg.springxmlbean.entity.Role#1"
class:是一个类的全限定名
-->
<bean id="role1" class="com.wbg.springxmlbean.entity.Role">
<!-- property元素是定义类的属性,name属性定义的是属性名称 value是值
相当于:
Role role=new Role();
role.setId(1);
role.setRoleName("高级工程师");
role.setNote("重要人员");-->
<property name="id" value="1"/>
<property name="roleName" value="高级工程师"/>
<property name="note" value="重要人员"/>
</bean>
<bean id="rolew" class="com.wbg.springxmlbean.entity.Role">
<!-- constructor-arg元素,index代表参数索引, value是值
相当于:
Role role=new Role(1,"高级工程师","重要人员");-->
<constructor-arg index="0" value="1"/>
<constructor-arg index="1" value="高级工程师"/>
<constructor-arg index="2" value="重要人员"/>
</bean>
<bean id="user" class="com.wbg.springxmlbean.entity.User">
<property name="id" value="1"/>
<property name="age" value="18"/>
<property name="name" value="韦邦杠"/>
<!--name是属性名称 ref是对应的Bean-->
<property name="role" ref="role1"/>
</bean>
测试:
public static void main(String[] args) {
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("Role.xml");
UserService userService= (UserService) applicationContext.getBean("userService");
userService.setUser((User)applicationContext.getBean("user"));
System.out.println(userService.getUser());
}

2、装配集合
定义类:
package com.wbg.springxmlbean.entity;
import java.util.*;
public class ComplexAssembly {
private Long id;
private List<String> list;
private Map<String,String> map;
private Properties properties;
private Set<String> set;
private String[] array;
@Override
public String toString() {
return "ComplexAssembly{" +
"id=" + id +
", list=" + list +
", map=" + map +
", properties=" + properties +
", set=" + set +
", array=" + Arrays.toString(array) +
'}';
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
public Set<String> getSet() {
return set;
}
public void setSet(Set<String> set) {
this.set = set;
}
public String[] getArray() {
return array;
}
public void setArray(String[] array) {
this.array = array;
}
}
xml:
<bean id="complexAssembly" class="com.wbg.springxmlbean.entity.ComplexAssembly">
<property name="id" value="1"/>
<property name="list">
<!--List属性对应list元素进行装配,然后通过多个value设值-->
<list>
<value>value-list-1</value>
<value>value-list-2</value>
<value>value-list-3</value>
<value>value-list-4</value>
</list>
</property>
<property name="map">
<!--Map属性对应map元素进行装配,然后通过多个entry设值,只是entry包含有key和value值设值-->
<map>
<entry key="key1" value="value1"/>
<entry key="key2" value="value2"/>
<entry key="key3" value="value3"/>
<entry key="key4" value="value4"/>
</map>
</property>
<property name="properties">
<!--Properties属性,对应props进行装配,然后通过prop元素数值,只是prop有一个必填的key,然后设值-->
<props>
<prop key="prop1">value-prop-1</prop>
<prop key="prop2">value-prop-2</prop>
<prop key="prop3">value-prop-3</prop>
<prop key="prop4">value-prop-4</prop>
</props>
</property>
<property name="set">
<!--Set属性对应set元素进行装配,然后通过多个value设值-->
<set>
<value>value-set-1</value>
<value>value-set-2</value>
<value>value-set-3</value>
<value>value-set-4</value>
</set>
</property>
<property name="array">
<!--Array属性对应array元素进行装配,然后通过多个value设值-->
<array>
<value>value-array-1</value>
<value>value-array-2</value>
<value>value-array-3</value>
<value>value-array-4</value>
</array>
</property>
</bean>
测试:
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("Role.xml");
ComplexAssembly complexAssembly= (ComplexAssembly) applicationContext.getBean("complexAssembly");
System.out.println(complexAssembly);

3、装配用户和角色
类:MapUserRole
package com.wbg.springxmlbean.entity;
import java.util.Map;
public class MapUserRole {
private Map<User,Role> map;
@Override
public String toString() {
return "MapUserRole{" +
"map=" + map +
'}';
}
public Map<User, Role> getMap() {
return map;
}
public void setMap(Map<User, Role> map) {
this.map = map;
}
}
xml:
<bean id="u2" class="com.wbg.springxmlbean.entity.User">
<property name="id" value="1"/>
<property name="name" value="小邦哥"/>
<property name="age" value="20"/>
</bean>
<bean id="u1" class="com.wbg.springxmlbean.entity.User">
<property name="id" value="2"/>
<property name="name" value="邦杠"/>
<property name="age" value="21"/>
</bean>
<bean id="r1" class="com.wbg.springxmlbean.entity.Role">
<constructor-arg index="0" value="1"/>
<constructor-arg index="1" value="中级工程师"/>
<constructor-arg index="2" value="普通人员"/>
</bean>
<bean id="r2" class="com.wbg.springxmlbean.entity.Role">
<constructor-arg index="0" value="2"/>
<constructor-arg index="1" value="高级工程师"/>
<constructor-arg index="2" value="重要人员"/>
</bean>
<bean id="mapUserRole" class="com.wbg.springxmlbean.entity.MapUserRole">
<property name="map">
<map>
<entry key-ref="u1" value-ref="r1"/>
<entry key-ref="u2" value-ref="r2"/>
</map>
</property>
</bean>
测试:

demo:https://github.com/weibanggang/springXmlBean
Spring 通过XML配置装配Bean的更多相关文章
- Spring基础篇——通过Java注解和XML配置装配bean
自动化装配的确有很大的便利性,但是却并不能适用在所有的应用场景,比如需要装配的组件类不是由自己的应用程序维护,而是引用了第三方的类库,这个时候自动装配便无法实现,Spring对此也提供了相应的解决方案 ...
- Spring基础篇——通过Java注解和XML配置装配bean(转载)
作者:陈本布衣 出处:http://www.cnblogs.com/chenbenbuyi 本文版权归作者和博客园共有,欢迎转载分享,但必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留 ...
- Spring实战3:装配bean的进阶知识
主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...
- Spring实战2:装配bean—依赖注入的本质
主要内容 Spring的配置方法概览 自动装配bean 基于Java配置文件装配bean 控制bean的创建和销毁 任何一个成功的应用都是由多个为了实现某个业务目标而相互协作的组件构成的,这些组件必须 ...
- Spring框架(3)---IOC装配Bean(注解方式)
IOC装配Bean(注解方式) 上面一遍文章讲了通过xml来装配Bean,那么这篇来讲注解方式来讲装配Bean对象 注解方式需要在原先的基础上重新配置环境: (1)Component标签举例 1:导入 ...
- spring+mybaits xml配置解析----转
一.项目中spring+mybaits xml配置解析 一般我们会在datasource.xml中进行如下配置,但是其中每个配置项原理和用途是什么,并不是那么清楚,如果不清楚的话,在使用时候就很有可能 ...
- spring的xml配置声明以及相应的问题处理
spring的xml配置声明: xml配置声明 Code 问题处理 问题1 xml报错: cvc-elt.1: Cannot find the declaration of element 'bea ...
- spring中用xml配置构造注入的心得
spring中用xml配置构造注入时,如果 <constructor-arg> 属性都是 ref ,则不用理会参数顺序 <constructor-arg ref="kill ...
- Spring框架(2)---IOC装配Bean(xml配置方式)
IOC装配Bean (1)Spring框架Bean实例化的方式提供了三种方式实例化Bean 构造方法实例化(默认无参数,用的最多) 静态工厂实例化 实例工厂实例化 下面先写这三种方法的applicat ...
随机推荐
- Rabbit的直连交换机direct
直连交换机类型为:direct.加入了路由键routingKey的概念. 就是说 生产者投递消息给指定交换机的指定路由键. 只有绑定了此交换机指定路由键的消息队列才可以收到消息. 生产者: packa ...
- Activiti工作流小序曲
一般涉及到OA.ERP等公司办公系统都必须有一套办公流程,这时候使用activiti工作流框架会大大减轻我们的工作量,提高我们的开发效率. Activiti工作流简单介绍: 工作流(workflow) ...
- 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台
一. 开发环境 1. 点击此查看并下载需要的 Eclipse IDE for Java EE Developers 开发工具,依赖于java,推荐选用32位 2. 点击此查看并下载需要的 MySQ ...
- 配置Spring
搭建Springmvc的时候,出现异常: IOException parsing XML document from ServletContext resource [/WEB-INF/applica ...
- 基于Maven的Spring + Spring MVC + Mybatis的环境搭建
基于Maven的Spring + Spring MVC + Mybatis的环境搭建项目开发,先将环境先搭建起来.上次做了一个Spring + Spring MVC + Mybatis + Log4J ...
- Grunt实践之简易教程
以前自己太low了,都没用过高大上的前端自动化打包工具,开发方式也是偏传统的.加入到新的团队后得拼命赶上啊,前端技术更迭太快,各种技术层出不穷,智商都快不够用了.看人家都用的牛逼哄哄的技术,自己还守着 ...
- div,css&table布局有哪些区别
DIV+CSS布局与TABLE布局相比,有哪些优点? 1.代码少,页面文件小,下载快 Div+css的布局现在属于国际W3C标准,table不是. 都知道用div的布局代码肯定少,所有的样式都在CSS ...
- JavaScript中实现DI的原理(二)
JavaScript中实现DI的原理 在JavaScript中实现DI,看起来难,实际上原理很简单,它的核心技术是Function对象的toString().我们都知道,对一个函数对象执行toStri ...
- ogr2ogr使用
简介 org2ogr是OGR模块中提供的一个重要工具,用于对数据源进行格式转换 使用方式 命令行参数 [xingxing.dxx@30_28_6_20 J50F001020]$ ogr2ogr --l ...
- kafka leader平衡策略
1.1个partition的默认leader是replicas中的第一个replica 2.kafka controller会启动一个定时的check线程,kafka默认是5min周期,mafka是3 ...