Spring(二)Bean入门介绍

一、BeanFactory介绍

1.1、Bean:

  • 在Spring技术中是基于组件的
  • 最基本了是最常用的单元
  • 其实实例保存在Spring的容器当中

Bean通常被定义在配置文件当中,Bean实例化由Spring的Ioc容器进行管理,Bean的实例可以通过Beanfactory进行访问,实际上大部分J2EE应用,Bean是通过ApplicationContext来访问的,ApplicationContext是BeanFactory的子接口,功能要比BeanFactory强大许多

1.2、BeanFactory作用

  • 配置、创建以及管理Bean对象
  • 维持Bean对象之间的依赖关系
  • 负责Bean对象的生命周期

BeanFactory常用方法:

  •  containsBean(String beanname)
  • Object getBean(String beanName)

通常使用XmlBeanFactory类来实现

1.3、ApplicationContext

  • 读取Bean定义文件
  • 维护Bean之间的依赖关系
  • 国际化的支持
  • 资源文件的读取getRource()方法可以轻松读取Rource对象
  • 事件传播
  • 多配置文件加载

二、Bean定义

2.1、基本组成

配置文件

  • <beans/>是Sring配置文件的根节点
  • 一个<beans/>节点里面可以有多个<bean>节点

定义<bean>节点时,通常要指定两个属性

id:用来指明bean的标识符,这个标识符具有唯一性,Spring对bean的管理以及bean之间这种依赖关系都需要这个属性

class: 指明该bean的具体实现类,这里不能是接口(可以是接口实现类)全路径包名.类名

Bean在Spring容器中两种行为(通过scope来设置默认不写为singelton)

singleton:单实例模式(默认,构造方法为private),整个Spring的容器中只有一个共享实例存在(singleton)

non-singelton:每次请求该bean,Spring容器都会新建立一个bean实例,然后返回给程序(request,session,prototype)

2.2、创建Bean

Bean的命名:

按照Java中的命名规范即可,使用清晰的,描述性的,一致的命名规范

Bean的命名机制:

id 当在Spring的窗口当中,查找某个Bean对象时,首先根据id进行查找,将其余作为Bean的默认名称,如果ID属性不存在,则根据Name属性进行查找(将其中的第一个名称作为默认的名称),如果ID和NAME都不存在根据类的名称进行查找

id---------->name--------------->类名

<bean id="id1" class="实现类"></bean>
<bean name="id1" class="实现类"></bean>
<bean  class="实现类"></bean>

Bean的别名:

通过alias属性指定:

<alias name="指定关联的Bean的名称fromname" alias="该关联类的别名的名称toname"/>

2.3、创建Bean步骤

创建XML文件----写入配置信息---生成Bean类----加入Bean到配置文件

三、Bean注入

3.1、基本类型和String

  • 用到Value元素
  • XML解析器以String类型解析出数据

如果属性不是String类型,属性值会通过PropertyEditors转换为其他类型

3.2、注入Bean

 -ref元素进行标识 

Ref元素通常有两个属性:

bean:指定不在同一个XML文件中的bean的id

<bean id="test" class="com.pb.test">
<property name="user">
<ref bean="其他的bean的id"/>
</property>
</bean>

ocal:指定在同一个XML文件中的bean的id

<bean id="test" class="com.pb.test">
<property name="user">
<ref bean="相同的XML文件中的bean的id"/>
</property>
</bean>

value和ref的区别:

使用ref元素,可以让Spring在部署时验证依赖的Bean是否真实存在

使用value元素,进行指定仅在创建Bean实例时做验证,会导致错误的延时出现,而且还会带来额外的类型转制开销

3.3、集合注入

List:

<bean id="test" class="com.pb.test">
        <property name="lists">
        <list>
        <value>1</value>
        <value>2</value>
        <value>3</value>
        </list>
        </property>
    </bean>

Map:

<bean id="test" class="com.pb.test">
        <property name="map">
            <map>
                <entry key="key1">
                    <value>value1</value>
                </entry>
                <entry key="key2">
                    <value>key2</value>
                </entry>
            </map>
        </property>
    </bean>

props:

<bean id="test" class="com.pb.test">
<property name="props">
<props>
<prop key="key1">value1</prop>
<prop key="key2">value2</prop>
</props>
</property>
</bean>

set:  

 < property  name ="interest" >
             < set >
                 < value > 唱歌 </ value >
                 < value > 跳舞 </ value >
                 < value > 书法 </ value >
             </ set >
    </ property >

3.4、自动绑定

通过autowire属性来设置

no:默认的。默认为不绑定

byName:根据属性名称自动进行绑定

byType:根据属性类型自动进行绑定

四、Bean的作用域

  • singleton:(单实例模式)spring容器只会存在一个共享的bean实例,并且所有针对该bean的请求只会返回同一个bean实例。
  • propertype(no-singleton):对每一次针对该bean的请求都会生成一个新的bean实例。 相当于java中的new 操作。定义为propertype的bean其生命周期很长,不易回收,通常要额外的处理。
  • request:针对每一次的http请求都会产生一个新的bean实例,Bean仅在当前的http request范围内有效
  • session:针对每一次的http请求都会产生一个新的bean实例,Bean仅在当前的http session范围内有效

五、Bean管理生命周期

5.1、Bean的生命周期

5.2、生命周期管理

两个时机

Spring可以管理实例化bean之间以及销毁之前的行为

注入依赖关系之后:

  • 使用init-method属性:通过指定init-method属性,确定某个方法应该在Bean依赖关系结束之后执行。这种方式无需要将代码与Spring的接口耦合在一起代码污染极小。通常在bean当中进行方法定义如init()方法,然后在配置文件Bean元素中加入init-method属性来实现这个过程。
  • 实现InnitializingBean接口:这种方式无须指明init-method属性,当窗口依赖注入以后,会自动调用afterPropertiesSet方法,它和init-method执行效果一样,但这种方式属于侵入性的代码设计不推荐使用

销毁Bean之前:

  •  destroy-method:用于在执行Bean销毁之前所执行的方法,这种方式和init-method一样无压需要代码与Spring的接口耦合在一起代码污染极小。在bean中加入destory-method属性和实现这个过程
  • 实现DisposeableBean接口:无需要指明destory-method属性,当容器依赖注入以后,会自动调用destroty方法,属于侵入性代码设计不推荐使用

六、Bean的继承

Bean的继承:

什么是Bean继承呢?继承是指子bean可以从父bean继承配置信息,也可以覆盖特定的配置信息,或者在父bean的基础之上加入新的配置信息,其实质类似于java中的子类与父类的继承关系,利用继承可以节省很多配置工作,在实际的项目应用中,共有的配置会配置成模板,供子bean继承,如果2个bean之间配置信息大致相同,可以采用bean的继承来减少配置工作

Bean的模板:

在Spring中既然要将公用的配置,配置称模板,这个模板不需要被实例化,而仅仅作为子bean的模板来使用,但在ApplicationContext或者BeanFactory默认会初始化所有的bean.

使用abstract属性,该属性可以阻止模板被实例化

abstract="true"时,表示该bean是抽象的bean,不能被初始化。

  

  

  

  

  

  

  

原文地址:https://www.cnblogs.com/yuexiaoyun/p/9456491.html

时间: 2024-08-27 17:10:15

Spring(二)Bean入门介绍的相关文章

Spring(二)Bean入门

一.BeanFactory介绍 1.1.Bean: 在Spring技术中是基于组件的 最基本了是最常用的单元 其实实例保存在Spring的容器当中 Bean通常被定义在配置文件当中,Bean实例化由Spring的Ioc容器进行管理,Bean的实例可以通过Beanfactory进行访问,实际上大部分J2EE应用,Bean是通过ApplicationContext来访问的,ApplicationContext是BeanFactory的子接口,功能要比BeanFactory强大许多 1.2.BeanF

Spring(二)之入门示例

任何编程技术,特别是入门示例,通常都是Hello World,在这里我也遵循这个业界公认的原则. 这里我使用的maven项目,大家如果想要演示,建议使用Eclipse(含maven插件)或Idea(含maven插件)或Eclipse+本地安装maven3以上等. 一.导入Maven依赖 这里我将基本所需的依赖都导入进去了. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w

Spring二 Bean详解

Bean详解 Spring框架的本质其实是:通过XML配置来驱动Java代码,这样就可以把原本由java代码管理的耦合关系,提取到XML配置文件中管理.这样就实现了系统中各组件的解耦,有利于后期的升级和维护.1.Bean的基本定义和Bean别名<beans>元素是Spring配置文件的根元素,该元素可以指定如下属性:default-lazy-init:指定<beans>元素下配置的所有bean默认的延迟初始化行为default-merge:指定<beans>元素下配置的

Spring 装配Bean

Spring 装配Bean 装配解释: 创建应用对象之间协作关系的的行为通常称为装配(wiring),这也是依赖注入的本质 依赖注入是Spring的基础要素 一 : 使用spring装配Bean基础介绍 1 :声明Bean Bean的概念:beans 本身是一个大工厂,beans中的每一个bean就等于定义了一个组件,每个组件中就是我们具体的某个功能 1.1 :创建Spring 配置Spring是很重要的,如果没有配置Spring,那么就等于声明了一个空的容器,毫无意义. 通过配置Spring容

[Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习. 一, AspectJ的概述: AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. Spring为了简化自身的AOP的开发,将AspectJ拿过来作为Spring自身一个AOP的开发.

看看Spring源码(二)——bean实例化

首先来看一段代码,看过上一节的朋友肯定对这段代码并不陌生.这一段代码诠释了Spring加载bean的完整过程,包括读取配置文件,扫描包,加载类,实例化bean,注入bean属性依赖. public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // Prepare this context for refreshing. prep

dubbo入门介绍及结合spring搭建(源码放送)

前言 关于dubbo的介绍网上有很多博文有入门级的说明,但在这里,将会提供给大家dubbo的入门介绍,dubbo结合spring项目的简单搭建,以及提供demo源代码的免费下载. dubbo的官方网址是:http://dubbo.io/ dubbo框架使用的demo源码下载地址:http://download.csdn.net/detail/fighterandknight/9514559 dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及

Spring入门介绍

概述 下载地址:https://repo.spring.io/release/org/springframework/spring/ spring是开源的轻量级框架 spring核心的主要两部分 AOP :面向切面编程,扩展功能而不修改源代码 IOC :控制反转,对象的创建通过spring配置来实现 spring是一站式框架 web :springMVC service :IOC dao :JDBC IOC IOC的底层原理 创建xml配置文件,配置要创建对象的类 <bean id="us

深入探索spring技术内幕(二): 剖析spring管理Bean的原理与配置

求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / \ b c / \ / \ d e f g 返回3. 详细描述: 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1 失败