spring的自动装配

spring IOC容器可以自动装配bean,只需要在bean的autowire属性指定自动装配的模式。

模式:

1、byType:根据类型自动装配。根据bean的类型和当前bean的属性的类型进行自动装配,若IOC容器中有1个以上的类型匹配的bean,则抛出异常;

2、byName:根据名称自动装配,byname根据bean的名字和当前bean的setter风格的属性名进行装配,也就是说bean的id和类中的set方法的名字相对应,如类中的set方法是setUser(),则其对应xml文件配置的bean的id=“user”,若id="user2",则自动装配失败,获取不到对应bean的值,所以我们常常把bean的id写成对应类名的首字母小写;

3、constructor: 通过构造器自动装配(不推荐使用)。

配置spring自动装配的xml文件

	<bean id="car" class="com.test.autowire.Car"
p:name="ddd" p:price="20000"></bean> <!-- 在自动装配使用byType时,同时有多个类型匹配的bean会抛出异常
<bean id="car2" class="com.test.autowire.Car"
p:name="dazhong" p:price="20000"></bean> --> <bean id="address" class="com.test.autowire.Address" p:city="beijing"
p:no="23"></bean>
<!-- 在自动装配使用byName时,id没有对应的setter方法,则获取不到配置的bean值
<bean id="address1" class="com.test.autowire.Address"
p:city="beijing" p:no="23"></bean> --> <!--为person bean添加自动装配 autowire="byType"或者autowire="byName" -->
<bean id="person" class="com.test.autowire.Person" p:name="fei"
autowire="byName"></bean>

运行效果

1、成功运行:

2、在自动装配使用byType时,同时有多个类型匹配的bean会抛出错误异常信息

3、**在自动装配使用byName时,id没有对应的setter方法,则获取不到配置的bean值 **

缺点:

1、在bean的配置文件设置autowire属性进行自动装配,会装配所有bean的属性,若希望只装配个别的属性就显得不够灵活;

2,、不能够同时装配byName 和byType所以在项目中很少使用自动装配,但是在整合框架的时候能够用到。

bean的继承和依赖关系

继承:被继承的bean叫做父bean,继承的叫做子bean

1、子bean从父bean继承配置,包括属性配置,子bean也可以覆盖从父bean继承过来的配置;

2、父bean作为模板,设置abstract属性为true,这样就不能实例化这个bean,并不是所有的属性被继承,如abstract,autowire等不会被继承;

3、可以忽略父bean的class属性,让子bean指定自己的类,而共享相同的属性配置,此时abstract 必须为true.

配置spring继承和依赖的xml文件

<!-- 抽象bean:bean的abstract属性为true的bean,这样的bean不能被实例化,只能用来继承配置; 若某一个的bean的class属性没有指定,则该bean必须是一个抽象bean -->
<bean id="address" p:city="beijing" p:no="23" abstract="true"></bean> <!-- bean配置的继承:使用bean的parent属性指定继承那个bean的配置 -->
<bean id="address2" class="com.test.autowire.Address" parent="address"
p:no="33"></bean> <bean id="car" class="com.test.autowire.Car" p:name="ddd" p:price="20000"></bean> <!--bean的依赖:depends-on属性,前置依赖的bean在本bean实例化之前创建好,若没有创建好则抛出异常 -->
<bean id="person" class="com.test.autowire.Person" p:name="qin"
p:address-ref="address2" depends-on="car"></bean>

运行效果

1、成功运行:

2、前置依赖的bean在本bean实例化之前没有创建好,抛出异常错误信息

spring学习-3的更多相关文章

  1. spring 学习之 bean 的注入方式 property和constructor-arg的使用方式

    spring 学习之 bean 的注入方式 property和constructor-arg的使用方式. bean的注入方式: property 注入是: 通过setxx方法注入. construct ...

  2. Spring学习之AOP总结帖

    AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对组件(比如类)进行开发,然后对组件进行组 ...

  3. Spring学习之第一个AOP程序

    IOC和AOP是Spring的两大基石,AOP(面向方面编程),也可称为面向切面编程,是一种编程范式,提供从另一个角度来考虑程序结构从而完善面向对象编程(OOP). 在进行 OOP 开发时,都是基于对 ...

  4. MyEclipse Spring 学习总结三 SpringMVC

    MyEclipse Spring 学习总结三 SpringMVC 一.SpringMVC原理 1.Springmvc 框架介绍 1)Spring 框架停工了构建Web应用程序的全功能MVC模块.Spr ...

  5. Spring学习 Ioc篇(一 )

    一直以来忙于项目的开发,Spring虽然不用,一直想系统地学习一下,想看看它的源码,都没有时间,这段时间比较充裕,就索性先把Spring学习下,熟悉各个功能再去探究它内部的实现.就从Ioc篇开始学习. ...

  6. Spring学习(三)——Spring中的依赖注入的方式

    [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring.不知 ...

  7. Spring学习(二)——Spring中的AOP的初步理解[转]

      [前面的话] Spring对我太重要了,做个关于web相关的项目都要使用Spring,每次去看Spring相关的知识,总是感觉一知半解,没有很好的系统去学习一下,现在抽点时间学习一下Spring. ...

  8. 【Spring学习笔记-MVC-3.1】SpringMVC返回Json数据-方式1-扩展

    <Spring学习笔记-MVC>系列文章,讲解返回json数据的文章共有3篇,分别为: [Spring学习笔记-MVC-3]SpringMVC返回Json数据-方式1:http://www ...

  9. Spring学习8-Spring事务管理

      http://blog.sina.com.cn/s/blog_7ffb8dd501014e0f.html   Spring学习8-Spring事务管理(注解式声明事务管理) 标签: spring注 ...

  10. Spring学习之Ioc控制反转(1)

    开始之前: 1. 本博文为原创,转载请注明出处 2. 作者非计算机科班出身,如有错误,请多指正 ---------------------------------------------------- ...

随机推荐

  1. mysql数据库补充知识1 安装数据库破解数据库密码已经创建用户

    一.安装MYSQL数据库 1.yum安装 #二进制rpm包安装 yum -y install mysql-server mysql 2.源码安装   1.解压tar包 cd /software tar ...

  2. 剑指offer 面试58题

    面试58题: 题目:翻转字符串 题:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意 ...

  3. 谷歌机器学习速成课程---3降低损失 (Reducing Loss):梯度下降法

    迭代方法图(图 1)包含一个标题为“计算参数更新”的华而不实的绿框.现在,我们将用更实质的方法代替这种华而不实的算法. 假设我们有时间和计算资源来计算 w1 的所有可能值的损失.对于我们一直在研究的回 ...

  4. rails 下载 send_file

    def download send_file File.join(Rails.root, "public", @doc.link), :filename => @title+ ...

  5. Funq之Lambda表达式2

    Last month I started a series of posts covering some of the new VB and C# language features that are ...

  6. mysql 触发器 存储过程 java调用

    触发器和存储过程是为了提高SQL的运行效率. SQL语句先编译.后执行,而触发器与存储过程都会提前预编译完成,且只编译一次,供反复调用. 随着时代的进步,硬件与带宽的提升,触发器和存储过程提升效率并不 ...

  7. 关于dispatch_semaphore的使用

    dispatch_semaphore是GCD用来同步的一种方式,与他相关的共有三个函数,分别是 dispatch_semaphore_create,dispatch_semaphore_signal, ...

  8. [SCOI2005]超级格雷码

    题目 BZOJ 洛谷 做法 爆搜真有意思 满足不重复且异或后仅一位为\(1\) 利用奇偶性交叉搜索(仅改变一位) My complete code #include<bits/stdc++.h& ...

  9. Eclipse开发快捷键精选

    1.alt+?或alt+/:自动补全代码或者提示代码2.ctrl+o:快速outline视图3.ctrl+shift+r:打开资源列表4.ctrl+shift+f:格式化代码5.ctrl+e:快速转换 ...

  10. Windows 端口和所提供的服务

    一 .端口大全 端口:0 服务:Reserved 说明:通常用于分析操作系统.这一方法能够工作是因为在一些系统中“0”是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果.一种典型的扫描,使 ...