5. Spring 通过 XML 配置 bean (进阶)
1. 设置 bean 的作用域
当通过 Spring IOC 容器创建 bean 实例的时候,不仅可以完成 bean 的实例化,也可以为 bean 指定特定的作用域,Spring 支持以下 5 种作用域:
1. singleton:单例模式。在整个 IOC 容器中,使用 singleton 定义的 bean 实例将只有一个。
2. prototype:原型模式,每次通过容器的 getBean 方法获取 prototype 定义的 Bean 时,都将产生一个新的 Bean 实例
3. request:对于每次 HTTP 请求,使用 request 定义的 Bean 都将产生一个新实例,即每次 HTTP 请求将会产生不同的Bean实例。只有在 Web 应用中使用 Spring 时,该作用域才有效
4. session:对于每次 HTTP Session,使用 session 定义的 Bean 都将产生一个新实例。同样只有在 Web 应用中使用 Spring 时,该作用域才有效
5. globalsession:每个全局的 HTTP Session,使用 session 定义的 Bean 都将产生一个新实例。典型情况下,仅在使用 portlet context 的时候有效。同样只有在 Web 应用中使用 Spring 时,该作用域才有效
2. 使用内部 bean
在配置 bean 的时候,当一个 bean 中包含另一个 bean 的时候,我们除了可以用引用的办法,还可以使用内部 bean 来进行配置。下面附上代码:
这里要注意的是,定义的内部 bean 不能被外部访问(所以叫做内部 bean)
3. 自动装配
在 bean 节点中配置 autowire 属性,可以使用自动装配的功能。可以通过 Type 和 Name 两种方式获取资源
比如,我在 Person 类中定义了一个 Address 属性,在配置的时候,配置一个 Address 的 bean,然后配置一个 Person 的 bean,其中,Person 中的 Address 属性不给赋值,我们要通过自动装配的方式来给它赋值。方式就是,在 Person 这个 bean 的配置属性中加入一个 autowire 属性,值为 “byType” ,这样,IOC 容器就能根据 Person 中属性的类型来自动的进行属性的装配。下面,附上代码:
<?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"> <!-- 添加 Address 和 Person -->
<bean id="address" class="com.spring.xmlBean.Address" >
<constructor-arg name="city" value="日照"></constructor-arg>
<constructor-arg name="province" value="山东"></constructor-arg>
</bean> <bean id="person" class="com.spring.xmlBean.Person" autowire="byType">
<property name="name" value="Little-Koala"></property>
<property name="age" value="18"></property>
</bean>
</beans>
autowire 自动装配
这里我们用的是 byType 的方式,这里需要注意的是,如果在 IOC 容器中匹配到了多个 bean,那么 IOC 容器将会抛出异常,所以此时必须保证容器里面只能有一个能够匹配的 bean。
还有 byName 的方式,这种方式是通过匹配属性名和 bean 的 id 名的方式,这种方式有一个缺点,就是要假定 bean 的名字和要自动装配的属性的名字是相同的。
除了上面两种方式,还有一种 constructor 方式,就是 IOC 自动获取可以加入要配置的 bean 的构造器中的 bean。感觉这种方式不太好用,了解一下即可
5. Spring 通过 XML 配置 bean (进阶)的更多相关文章
- spring+mybaits xml配置解析----转
一.项目中spring+mybaits xml配置解析 一般我们会在datasource.xml中进行如下配置,但是其中每个配置项原理和用途是什么,并不是那么清楚,如果不清楚的话,在使用时候就很有可能 ...
- @ImportResource-SpringBoot使用xml配置Bean
前言 SpringBoot推荐使用注解的方式去声明bean,但还是提供了xml的方式去加载bean 一.创建要声明为bean的实体类 WzqEntity.java package com; /** * ...
- 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 Ioc容器之使用XML配置Bean
1.项目截图 2.创建xml文件 3.打印机接口 package com.example.demo.computerTest; public interface Printer { void init ...
- Spring 通过XML配置装配Bean
使用XML装配Bean需要定义对于的XML,需要引入对应的XML模式(XSD)文件,这些文件会定义配置Spring Bean的一些元素,简单的配置如下: <?xml version=" ...
- Spring学习之xml配置Bean总结
学习Spring时,我用的是Maven来管理jar包,先看看maven的pom.xml: pom.xml <project xmlns="http://maven.apache.org ...
- spring applicationContext.xml 中bean配置
如果采用set get方法配置bean,bean需要有set get 方法需要有无参构造函数,spring 在生成对象时候会调用get和set方法还有无参构造函数 如果采用constructor方法则 ...
- Spring下如何配置bean
本次讲述项目背景: 创建Service类,Service下用到dao类.通过在Spring中配置bean,实现在项目启动时,自动加载这个类 本次只讲述配置bean的注意事项,故只给出简单实例: 创建S ...
随机推荐
- 报表工具-ECharts 特性介绍
ECharts 特性介绍 ECharts,一个纯 Javascript 的图表库,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/11,Chrome,Firefox,S ...
- 数据结构Java实现03----栈:顺序栈和链式堆栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
- AS中的minSdkVersion、compileSdkVersion、targetSdkVersion、buildTools及tools关系和区别
1.参考文章关于compileSdk.minSdk.targetSdk的文章 http://chinagdg.org/2016/01/picking-your-compilesdkversion-mi ...
- C# - 设计模式 - 策略模式
策略模式 问题场景 多个类型都有一些共同的属性和方法,可以称这些成员为行为,为了避免重复在多个类型中编码相同部分的行为,应考虑将这些行为定义在抽象类(超类)中,利用继承时多个类型可以共享这些行为.比如 ...
- 网络学习day01_计算机网络与分层思想
2018.9.1 网络学习day01_计算机网络与分层思想 网络安全 计算机网络 分层思想 LAN与WAN LAN(Local Area Network)--局域网 局域网(Local ...
- C语言之路-3-循环
1.while循环计算数字位数 #include<stdio.h> int main() { ; int x; printf("请输入数字:"); scanf(&quo ...
- sed 正则 ! 取反
!符号表示取反,x,y!表示匹配不在x和y行号范围内的行,利用sed命令用于的阿银不在2-7之间的行 [111 sed]$ cat input [111 sed]$ sed -n '2,7!p' in ...
- Linux 虚拟机上安装linux系统 (ip:子网掩码,网关,dns,交换机,路由知识回顾)
一 安装虚拟机 二 虚拟机上配置好在安装linux系统 三 知识回顾 交换机:主机在局域网内的身份是MAC地址(可以通过[交换机广播:交换机通过被动学习来建立一张“接口号”和“MAC地址”的对照表]或 ...
- memcached性能测试之Twemperf
Twemperf又名mcperf,是一款memcached的性能测试工具.Mcperf就像httperf,但它基于memcached的协议,它使用memcached的ASCII协议并且能够快速的产生大 ...
- 【原创】大叔问题定位分享(4)Kafka集群broker节点从zookeeper上消失
kafka_2.8.0-0.8.1 一 现象 生产环境一组kafka集群经常发生问题,现象是kafka在zookeeper上的broker节点消失,此时kafka进程和端口都在,然后每个broker都 ...