Bean的自动装配以及Bean之间的关系

本文详细介绍了Spring框架中的Bean自动装配,包括byType和byName两种模式,以及其优缺点。同时,讨论了Bean之间的关系,如继承和依赖。配置继承允许bean配置的复用,依赖关系可以通过depends-on属性设定。此外,还涵盖了bean的作用域,如singleton和prototype,并解释了如何使用外部属性文件来管理部署细节。

在这里插入图片描述

自动装配

  • Spring IOC 容器可以自动装配Bean,需要做的仅仅是在 < bean >标签的autowire属性里指定自动装配的模式
  • byType(根据类型自动装配):根据bean的类型和当前bean的属性的类型进行自动装配,若容器中有一个以上的类型匹配的bean,则抛异常。
  • byName(根据名称自动装配):根据bean的名字和当前bean的setter风格的属性名进行自动装配,若有匹配的就进行自动装配

例子

<bean id = "person" class = "Person" p:name="Tom" autowire = "byType" />

xml配置里的Bean自动装配的缺点

  • 在Bean配置文件里设置autowire属性会自动装配Bean的所有属性,然而若只是希望装配个别属性时,autowire不那么灵活
  • autowire属性要么根据类型自动装配要么根据名称自动装配,不能两者都用
  • 还有就是,一般明确清晰的配置文件更有说服力,而自动装配可能差点意思

Bean之间的关系:继承、依赖

配置的继承

<bean id = "address" class = "Address" p:city="Beijing" p:street = "五道口“ />
<!--bean 配置的继承:使用的bean的parent属性指定继承哪个bean的配置-->
<bean id = "address2" class = "Address" p:strret="大钟寺" parent="address" />

抽象bean(就是一个模板)
抽象bean:也就是bean的abstract属性为true的bean,这样的bean不能被容器初始化,只能用来被继承,类似Java的抽象类

<bean id = "address" class="Address" p:city="beiJing"  p:street="wudaokou" abstract="true" />
那么如果要继承这个bean配置,只要parent指向它
  • Spring允许继承bean的配置,被继承的称为父bean,继承的称为子bean
  • 子bean从父bean中继承配置,包括bean的属性配置
  • 父bean可以作为配置模板,也可以作为bean实例,若只想把父bean作为模板,可以设置属性bean的abstract为true,Spring不会实例化这个bean

依赖关系

  • Spring允许用户通过depends-on属性设定bean前置依赖的Bean,前置依赖的Bean会在本Bean实例化前创建好
<bean id = "Person" class = "Person" p:name = "Tom" p:address-ref = "address" depends-on="car" />

bean的作用域

singleTon;prototype

<bean id="car" class="Car" scope="prototype >
	<property name = "brand" value = "aodi" />
	<property name = "price" value = "300000" />
</bean>

使用bean的scope属性来配置bean的作用域
singleton:默认值,容器初始时创建bean实例,在整个容器的生命周期内只创建这一个bean,单例的
prototype:原型的。容器初始化时候不创建bean实例,每次请求时创建一个bean实例,并返回


使用外部属性文件

  • 在配置bean的时候,有时候需要在Bean的配置文件中混入系统部署的细节信息,这些部署细节实际上要和bean配置相分离
<bean id ="dataSource" class="c3p0.DataSource">
	<property name = "user" value = "root" />
	<property name = "password" value = "123456" />
	<property name = "driverClass" value = "jdbc.Driver" />
	<property name = "jdbcUrl" value = "" />
</bean>
  • spring提供了一个BeanFactory后置处理器,这个处理器允许用户将Bean配置的部分内容外移到属性文件中。在Bean的配置文件里使用形式为${val}的变量,后置处理器从属性文件里加载属性,使用这些属性替换变量
导入属性文件
<contex:property-placeholder location="classpath:db.properties"/>

<bean id ="dataSource" class="c3p0.DataSource">
	<property name = "user" value = "${user}" />
	<property name = "password" value = "${password}" />
	<property name = "driverClass" value = "${driverclass}" />
	<property name = "jdbcUrl" value = "${jdbcUrl}" />
</bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值