• spring学习-3


    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实例化之前没有创建好,抛出异常错误信息

    作者:starryfeiii
    出处:http://www.cnblogs.com/feiii/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,原文链接否则保留追究法律责任的权利。
  • 相关阅读:
    转:SQL Server 2005 Express附加数据库为“只读”的解决方法!
    通过WPF模拟交通红绿灯(图文教程)
    手把手教你怎样把文件保存到Oracle数据库
    已删除
    JavaScript精炼类(class)、构造函数(constructor)、原型(prototype)
    Ext:RowLayout和ColumnLayout连用必须加panel的问题
    Ext:前台js往gridpanel动态添加记录
    "int i=1" "int i=new int() "和“String str = "a";” “String str = new String("a")”区别以及c#值类型和引用类型
    未能加载文件或程序集“Model Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”或它的某一个依赖项。系统找不到指定的文件。
    hibernate:inverse、cascade,一对多、多对多详解
  • 原文地址:https://www.cnblogs.com/feiii/p/6309069.html
Copyright © 2020-2023  润新知