xml配置方式装配Bean

本文借鉴于:https://www.cnblogs.com/qdhxhz/p/6511887.html

Spring框架Bean实例化的方式提供了三种方式实例化Bean

  • 构造方法实例化(默认无参数,用的最多)
  • 静态工厂实例化
  • 实例工厂实例化

代码如下:

Bean1类(构造方法实例化)

package com;public class Bean1 {//必须提供无参的构造函数,系统有默认无参构造函数
}

Bean2类(静态工厂实例化)

package com;public class Bean2 {private static Bean2 bean2 = new Bean2();private Bean2(){}public static Bean2 createInstance(){return bean2;}
}

Bean3类(实例工厂实例化)

package com;public class Bean3 {}

Bean3Factory类

package com;public class Bean3Factory {private Bean3Factory(){}public Bean3 getInstance(){return new Bean3();}
}

applicationContext.xml配置文件

<?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"><!-- Bean的三种实例化方式 --><!-- 1.使用无参的构造器 --><bean id="bean1" class="com.Bean1"/><!-- 2.使用静态工厂方法  factory-method 是工厂提供的静态方法 --><bean id="bean2" class="com.Bean2" factory-method="createInstance"/><!-- 3.配置实例化工厂的方法 --><bean id="bean3Factory" class="com.Bean3Factory"/><bean id="bean3" factory-bean="bean3Factory" factory-method="getInstance"/><!-- end.Bean的三种实例化方式 --></beans>

测试类

package test;import com.Bean1;
import com.Bean2;
import com.Bean3;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestSpring {//实例化工厂方法@Testpublic void demo3(){//加载配置文件 创建工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Bean3 bean3 = applicationContext.getBean(Bean3.class);System.out.println(bean3);}//静态工厂方法@Testpublic void demo2(){//加载配置文件 创建工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Bean2 bean2 = applicationContext.getBean(Bean2.class);System.out.println(bean2);}//构造方法得到bean对象@Testpublic void demo1(){//加载配置文件 创建工厂ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");Bean1 bean1 = applicationContext.getBean(Bean1.class);System.out.println(bean1);}
}

运行结果如下图:

Bean的其他配置

一般情况下,装配一个Bean时,通过指定一个id属性作为Bean的名称

  • id 属性在IoC容器中必须是唯一的
  • id 的命名要满足XML对ID属性命名规范 必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号

如果Bean的名称中含有特殊字符,就需要使用name属性,例如: < bean name="#person" class=“cn.itcast.bean.Person”/>
因为name属性可以相同,所以后出现Bean会覆盖之前出现的同名的Bean

id和name的区别:

  • id遵守XML约束的id的约束.id约束保证这个属性的值是唯一的,而且必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号
  • name没有这些要求

如果bean标签上没有配置id,那么name可以作为id.

想进一步了解其他的标签配置可以看看这篇博客:https://blog.csdn.net/qq_39949109/article/details/82490864

xml配置文件的复杂操作

Bean属性的依赖注入
1.构造器注入
2.setter方法注入
上面两种注入方式在上一节我们已经简单讲过,就不讲了,下面主要讲一下配置文件xml的复杂操作

Car1类

package com;public class Car1 {private String name;private double price;public void setName(String name) {this.name = name;}public void setPrice(double price) {this.price = price;}@Overridepublic String toString() {return "Car1 [name=" + name + ", price=" + price + "]";}
}

CarInfo类

package com;public class CarInfo {public String getName(){return "本田";}public double calculatePrice(){return 110000;}
}

CollectionBean类

package com;import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;public class CollectionBean {private String name;private Integer age;private List<String> hobbies;private Set<Integer> numbers;private Map<String, String> map;private Properties properties;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public List<String> getHobbies() {return hobbies;}public void setHobbies(List<String> hobbies) {this.hobbies = hobbies;}public Set<Integer> getNumbers() {return numbers;}public void setNumbers(Set<Integer> numbers) {this.numbers = numbers;}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;}@Overridepublic String toString() {return "CollectionBean [name=" + name + ", age=" + age + ", hobbies=" + hobbies + ", numbers=" + numbers+ ", map=" + map + ", properties=" + properties + "]";}
}

Employee类

package com;public class Employee {private String name;private Car1 car1;public void setName(String name) {this.name = name;}public void setCar1(Car1 car1) {this.car1 = car1;}@Overridepublic String toString() {return "Employee [name=" + name + ", car1=" + car1 + "]";}
}

测试类

package test;import com.Car1;
import com.CollectionBean;
import com.Employee;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestSpring {@Testpublic void demo3() {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");CollectionBean collectionBean = applicationContext.getBean(CollectionBean.class);System.out.println(collectionBean);}@Testpublic void demo2() {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");Car1 car1 = (Car1) applicationContext.getBean("car1_1");System.out.println(car1);}@Testpublic void demo1() {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");Employee e = (Employee) applicationContext.getBean("employee2");System.out.println(e);}
}

Spring配置文件

<?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:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 引用p命名空间 --><!-- 如果要引用p命名,那在最上面sxd中就要配置  xmlns:p="http://www.springframework.org/schema/p"--><!--p:<属性名>="xxx" 引入常量值--><!--p:<属性名>-ref="xxx" 引用其它Bean对象--><bean id="car11" class="com.Car1" p:name="奥迪" p:price="500000"></bean><bean id="employee2" class="com.Employee" p:name="张三" p:car1-ref="car11"/><!-- 引入spEL表达式 --><bean id="carInfo" class="com.CarInfo"/><bean id="car1_1" class="com.Car1"><property name="name" value="#{carInfo.name}"/><property name="price" value="#{carInfo.calculatePrice()}"/></bean><!-- 复杂属性的依赖注入 --><bean  id="collectionBean" class="com.CollectionBean"><!-- 简单属性的注入 --><property name="name" value="小小关"/><property name="age" value="19"/><!-- 注入list集合 --><property name="hobbies"><list><value>吃饭</value><value>睡觉</value><value>看剧</value><value>敲代码</value></list></property><!-- 注入set集合 --><property name="numbers"><set><value>10</value><value>20</value><value>30</value><value>40</value><value>50</value></set></property><!-- 注入map集合 --><property name="map"><map><entry key="birthday" value="2000-1-1"/><entry key="address" value="地球"/><entry key="sex" value="男"/></map></property><!-- 注入Properties --><property name="properties"><props><prop key="compamy">西邮</prop><prop key="pnum">200</prop></props></property></bean><!-- end  Bean的依赖注入===================================================================================== --><!--<import resource="classpath:bean1.xml"/>--><!--<import resource="classpath:bean2.xml"/>--><!-- 这里导入是指如果在src下还有其它的beans.xml我们可以这样去调用 --></beans>

关于SqEl:
SqEl是一个支持运行时查询和操作对象图的强大的表达式语言。使用 #{…} 作为定界符,所有在大括号中的字符都将被认为是SpEL,其为bean属性的动态赋值提供便利。

通过它可以实现:

  • 通过bean的id对bean进行引用
  • 调用方法以及引用对象中的属性
  • 计算表达式的值
  • 正则表达式的匹配

Spring学习笔记:2(IOC装配Bean之xml方式)相关推荐

  1. IOC操作Bean管理XML方式(xml自动装配)

    目录 IOC操作Bean管理XML方式(xml自动装配) 一.演示自动装配过程 (1)根据 属性名称 装配 步骤一: 步骤二: 步骤三: (2)根据 属性类型 装配 (2.1)根据 类型 自动装配产生 ...

  2. IOC操作Bean管理XML方式(外部属性文件)

    目录 IOC操作Bean管理XML方式(外部属性文件) 前情引入: 实验演示: 1.直接配置数据库信息 (1)配置德鲁伊连接池 (2)引入德鲁伊连接池jar包 (3)创建一个bean6.xml配置文件 ...

  3. IOC操作Bean管理XML方式(bean 的生命周期)

    目录 IOC操作Bean管理XML方式(bean 的生命周期) 1.bean 的生命周期(在单例模式下的生命周期) (1)通过构造器创建 bean 的实例(执行类中无参构造方法去创建对象) (2)为 ...

  4. IOC操作Bean管理XML方式(bean的作用域)

    目录 IOC操作Bean管理XML方式(bean的作用域) 1.在Spring 里面,设置创建 bean 实例是单实例还是多实例的方式 (1)在Spring 配置文件bean 标签里面有属性(scop ...

  5. IOC操作Bean管理XML方式(FactoryBean)

    目录 IOC操作Bean管理XML方式(FactoryBean) Spring 有两种类型的bean 第一种:是普通的 bean 第二种:工厂bean FactoryBean 第一步:创建类,让这个类 ...

  6. IOC操作Bean管理XML方式(注入集合类型属性)

    目录 IOC操作Bean管理XML方式(注入集合类型属性) (1)首先进行环境的搭建和准备 (2)创建一个类:用来完成集合类型属性注入 (3)在Spring 配置文件进行配置 (4)编写一个测试类进行 ...

  7. IOC操作Bean管理XML方式(注入空值和特殊符号)

    IOC操作Bean管理XML方式(注入空值和特殊符号) 目录 IOC操作Bean管理XML方式(注入空值和特殊符号) (1)通过null标签注入空值: 标签注入空值 (2)属性值中包含特殊符号: 方法 ...

  8. IOC操作Bean管理XML方式(有参构造注入属性)

    IOC操作Bean管理XML方式 目录 有参构造注入属性 (1)步骤(创建类,定义属性,创建属性对应的有参构造方法): (2)步骤:在Spring 的xml配置文件中进行配置 (3)步骤:进行测试 结 ...

  9. IOC操作Bean管理XML方式(创建对象和set注入属性)

    目录 1.什么是 Bean 管理: (1)通过 Spring 创建对象 (2)通过 Spring 注入属性 2.IOC 操作 Bean 管理有两种方式: (1)基于 xml 配置文件方式实现 (1.1 ...

最新文章

  1. 避免到服务器的不必要的往返过程
  2. ios开发 静音键设置_合肥包河区:连夜设置三道拦水坝只为按下中考“静音键”...
  3. 秒杀系统设计的 5 个要点:前端三板斧+后端两条路
  4. vue 判断两对象是否一致_你的.vue文件就已经是你的文档了
  5. 开始工业物联网项目需要考虑的八大要点
  6. 苹果推出雷雳 3 Pro连接线:黑色编织设计 售价949元
  7. 用python创建一个从1到10的列表_【Python 1-8】Python手把手教程之——管理列表List...
  8. 二叉树遍历算法C++实现
  9. java中的extends与implement
  10. 为什么亚洲四小龙只有韩国出了三星和现代这样的品牌巨擘?
  11. “振心计划”受益房东超20万,爱彼迎中国活跃房源同比增长超两成
  12. 监控系统-Prometheus(普罗米修斯)(三)Grafana可视化图形工具
  13. HTTP 错误 404.17 - Not Found 请求的内容似乎是脚本,因而将无法由静态文件处理程序来处理
  14. 炫舞服务器显示方框怎么回事,win10界面全是显示方块如何解决_win10系统界面出现白色方框该怎么去除-win7之家...
  15. edg击败we视频_LPL夏季赛:EDG零封V5获三连胜 OMG2-1击败WE
  16. java 异或 排序_Java的位运算符详解实例——与()、非(~)、或(|)、异或(^)...
  17. 京剧《断密涧》中李密和王伯当的唱段
  18. 深度学习数学基础之线性代数
  19. 【爬虫实战项目】Python爬虫批量下载音乐飙升榜并保存本地(附源码)
  20. 微机原理-04-指令系统

热门文章

  1. 在CentOS 6.9 x86_64的nginx 1.12.2上开启echo-nginx-module模块实录
  2. 在Ubuntu 16.04.1 LTS上测试Linux AIO功能实录
  3. Tafficserver旁路接入方案综述
  4. zookeeper -- Mac 上 Intellij IDEA 配置 zookeeper(3.5.8) 源码阅读、运行、调试环境
  5. C++多线程:异步操作std::async和std::promise
  6. 《C++primer》第一章--开始
  7. ImportError: No module named images
  8. Javascript匿名函数
  9. SLAM闭合回环————视觉词典BOW小结
  10. Android 应用进行性能分析/APP/系统性能分析