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 ...
随机推荐
- Spring MVC 学习总结(一)——MVC概要与环境配置(IDea与Eclipse示例)
一.MVC概要 MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规范,用一种将业务逻辑.数据.显示分离的方法组织代码,MVC主要作用是降低了视图与业务 ...
- 收藏这些Safari快捷键,让你的Mac浏览网页更加方便
文章内容及图片来源于:知乎,如果涉及版权问题,请联系作者删除 文章收录于:风云社区(提供上千款各类mac软件的下载) Safari是Mac上的原生浏览器,功能自然很强大,现在每天在Mac上使用的最多的 ...
- Python list和 np.Array 的转换关系
一.List转String 1.str list转 string a_list = ["h","e","l","l",& ...
- NOI-OJ 1.13 ID:34 确定进制
整体思路 对于任意的p,q,r,可能使得p*q=r的最小进制应该是p,q,r三个数的所有数位中最大的数字+1,例如,6,9,42三个数中所有数位中最大的数字是9,故可能成立的最小进制是9+1,即10. ...
- Java设计模式之抽象工厂
概述 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. 设计模式 ...
- [物理学与PDEs]第2章习题11 Lagrange 形式的一维理想流体力学方程组在强间断线上的间断连接条件
对由第 10 题给出的 Lagrange 形式的一维理想流体力学方程组, 给出解在强间断线上应满足的间断连接条件 (假设体积力 $F\equiv 0$). 解答: $$\beex \bea \sez{ ...
- python学习02
python的数据类型 程序=数据类型+算法 1.数据类型:数据型,字符串,列表list,字典dict,set集合(),tuple元组() 1)数据型 int,整数型,理论上是无限大,不过受到机器内存 ...
- Linux Socket I/O
Ref: 一文读懂Socket通信原理 幽默讲解 Linux 的 Socket IO 模型
- Codeforces Round #449 (Div. 2) D. Ithea Plays With Chtholly
题目链接 交互题. 题意:给你三个数n,m,k.让你完成至多m次互动,每次给你一个q,让你从n个位置选一个位置放这个数,覆盖已经放过的数.让你再m次使得n个位置的数不递减,达到直接退出. 解法:暴力, ...
- springMVC中controller的几种返回类型
==网文1,还不错,感觉比较老旧springMVC中controller的几种返回类型 - CSDN博客http://blog.csdn.net/qq_16071145/article/details ...