spring入门教程之bean的继承与自动装配详解
作者:sunny_92 发布时间:2023-11-10 14:46:23
Spring之Bean的基本概念
大家都知道Spring就是一个大型的工厂,而Spring容器中的Bean就是该工厂的产品.对于Spring容器能够生产那些产品,则取决于配置文件中配置。
对于我们而言,我们使用Spring框架所做的就是两件事:开发Bean、配置Bean。对于Spring矿建来说,它要做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法完成“依赖注入”。
Bean的定义
<beans…/>元素是Spring配置文件的根元素,<bean…/>元素师<beans../>元素的子元素,<beans…/>元素可以包含多个<bean…/>子元素,每个<bean…/>元素可以定义一个Bean实例,每一个Bean对应Spring容器里的一个Java实例定义Bean时通常需要指定两个属性。
Id:确定该Bean的唯一标识符,容器对Bean管理、访问、以及该Bean的依赖关系,都通过该属性完成。Bean的id属性在Spring容器中是唯一的。
Class:指定该Bean的具体实现类。注意这里不能使接口。通常情况下,Spring会直接使用new关键字创建该Bean的实例,因此,这里必须提供Bean实现类的类名。
下面是定义一个Bean的简单配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 定义第一个Bean实例:bean1 -->
<bean id="bean1" class="com.Bean1" />
<!-- 定义第二个Bean实例:bean2 -->
<bean id="bean2" class="com.Bean2" />
</bean>
bean的自动装配
byName 根据bean的名字(id)和当前bean的setter属性名称自动匹配,匹配不到则不匹配
byType 根据bean的类型和当前bean的属性类型匹配,若IOC容器有1个以上的bean匹配类型,则抛异常
<bean id="person" class="com.sunny.beans.autowire.Person" p:name="autowire" autowire="byName"/>
bean的继承(parent)
使用parent属性指定继承那个bean,同时也可修改继承过来的属性值
<bean id="address2" class="com.sunny.beans.autowire.Address"
parent="address" p:street="萧山区"/>
抽象bean (模板)
bean的abstract属性为true的bean,不能被IOC容器初始化,只能用来被继承配置
如果一个bean未指定class属性,则必须为抽象bean
<bean id="address4" class="com.sunny.beans.autowire.Address"
p:city="杭州" p:street="西湖区" abstract="true"/>
bean的依赖
使用 depends-on属性指定
如果需要依赖多个bean使用逗号隔开
<bean id="car" class="com.sunny.beans.autowire.Car"
p:brand="奥迪" p:price="30000"></bean>
<!-- person 依赖 car -->
<bean id="person" class="com.sunny.beans.autowire.Person"
p:name="Tom" p:address-ref="address" depends-on="car"></bean>
bean的作用域(scope)
bean的作用域默认是单例的
singleton spring容器初始化就加载
prototype spring容器在输出bean时都会new
request(request,session和global session类型只实用于web程序,通常是和XmlWebApplicationContext共同使用)request可以看做prototype的一种特例
session Spring容器会为每个独立的session创建属于自己的全新的UserPreferences实例,比request scope的bean会存活更长的时间,其他的方面没区别
global session global session只有应用在基于porlet的web应用程序中才有意义,它映射到porlet的global范围的session,如果普通的servlet的web 应用中使用了这个scope,容器会把它作为普通的session的scope对待。
<bean id="car" class="com.sunny.beans.autowire.Car" p:brand="宝马" p:price="500000"
scope="prototype"></bean>
来源:http://www.jianshu.com/p/7ba133f857c8


猜你喜欢
- Spring框架七大模块简单介绍Spring中MVC模块代码详解Spring的WEB模块用于整合Web框架,例如Struts1、Struts
- 一、程序环境以下内容通过C#及VB.NET代介绍如何给Excel文档添加数字签名,以及删除Excel文档中已有的数字签名。工具使用最近发布的
- 本文实例讲述了C#使用iTextSharp将PDF转成文本的方法。分享给大家供大家参考。具体实现方法如下:using System;usin
- 网上查找资料要么是细节不够失败要么是根本没用也不需要这么复杂,在这里总结一下本人在宝塔部署前端和后端的方法。1.在宝塔上添加站点&u
- 基本环境:Android studio3.6NDK:r15c(尽量使用该版本)Opencv3.4.1 android sdk操作:(1)新建
- 本文实例讲述了C#获取每个年,月,周的起始日期和结束日期的方法。分享给大家供大家参考,具体如下:我们在写程序的时候往往要计算出年,月,周的开
- 本文实例为大家分享了Unity实现新手引导镂空效果的具体代码,供大家参考,具体内容如下一、实现思路创建有8个顶点的Mesh,内外边界都是四边
- 简介反射是Java编程语言中的一个特性。它允许执行的Java程序检查或 操作 自身,并操作程序的内部属性。例如,Java类可以获取其所有成员
- 轨迹压缩算法场景描述给定一个GPS数据记录文件,每条记录包含经度和维度两个坐标字段,根据距离阈值压缩记录,将过滤后的所有记录的经纬度坐标构成
- 目录一、图示二、链表的概念及结构三、单链表的实现四、完整代码的展示一、图示二、链表的概念及结构 链表是一种物理存储结构上非连续存储结构,数据
- 文件上传是网站非常常用的功能,直接使用Servlet获取上传文件还得解析请求参数,比较麻烦,所以一般选择采用apache的开源工具,comm
- 1、数组数组其实也是一种数据格式,不过是一种复合类型,它可以存储多个同类型的值。使用数组可以将同类型的变量整合起来管理,比如说我们现在要记录
- 1.概述Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。Spring MVC的特
- 对于换肤技术,相信伙伴们都见过一些大型app,到了某些节日或者活动,e.g. 双十一、双十二、春节等等,app的ICON还有内部的页面主题背
- 画廊视图(Gallery)表示,能够按水平方向显示内容,并且可用手指直接拖动图片移动,一般用来浏览图片,被选中的选项位于中间,并且可以响应事
- 本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下using System;using Microsoft
- 本文实例讲述了Java内置观察者模式。分享给大家供大家参考,具体如下:之前也简单地写过观察者模式(又称为发布-订阅模式)小例子,现在项目中也
- 程序触发鼠标、键盘事件是C#程序设计中比较常见的功能,本文实例展示了C#中winform实现自动触发鼠标、键盘事件的方法,有不错的实用价值。
- 在多线程处理问题时,无法通过@Autowired注入bean,报空指针异常,在线程中为了线程安全,是防注入的,如果要用到这个类,只能从bea
- MyBatis在注解上使用动态SQL1、用script标签包围然后像xml语法一样书写@Select({"<script&g