• (原)spring学习笔记5.公共的属性描述


    代码将weyspringofioc
    1.先写一个类Bean2.java

     1package com.zyl.spring;
     2
     3public class Bean2 {
     4    
     5    private Bean3 bean3;
     6    private Bean4 bean4;
     7    private Bean5 bean5;
     8    
     9    
    10    public Bean3 getBean3() {
    11        return bean3;
    12    }

    13    public void setBean3(Bean3 bean3) {
    14        this.bean3 = bean3;
    15    }

    16    public Bean4 getBean4() {
    17        return bean4;
    18    }

    19    public void setBean4(Bean4 bean4) {
    20        this.bean4 = bean4;
    21    }

    22    public Bean5 getBean5() {
    23        return bean5;
    24    }

    25    public void setBean5(Bean5 bean5) {
    26        this.bean5 = bean5;
    27    }

    28}

    29
    我们看到里面有依赖Bean3 Bean4 Bean5
    2.我们完成Bean3.4.5
    Bean3.java
     1package com.zyl.spring;
     2
     3public class Bean3 {
     4   
     5     private int id;
     6     
     7     private String name;
     8     
     9     private String password;
    10
    11    public int getId() {
    12        return id;
    13    }

    14
    15    public void setId(int id) {
    16        this.id = id;
    17    }

    18
    19    public String getName() {
    20        return name;
    21    }

    22
    23    public void setName(String name) {
    24        this.name = name;
    25    }

    26
    27    public String getPassword() {
    28        return password;
    29    }

    30
    31    public void setPassword(String password) {
    32        this.password = password;
    33    }

    34     
    35}

    36
    Bean4.java
     1package com.zyl.spring;
     2
     3public class Bean4 {
     4    
     5     private int id;
     6     
     7     private String name;
     8
     9    public int getId() {
    10        return id;
    11    }

    12
    13    public void setId(int id) {
    14        this.id = id;
    15    }

    16
    17    public String getName() {
    18        return name;
    19    }

    20
    21    public void setName(String name) {
    22        this.name = name;
    23    }

    24}

    25
    Bean5.java
     1package com.zyl.spring;
     2
     3public class Bean5 {
     4    private int age;
     5
     6    public int getAge() {
     7        return age;
     8    }

     9
    10    public void setAge(int age) {
    11        this.age = age;
    12    }

    13}

    14
    注意看.Bean3和Bean4.有相同的属性id 和name
    3.接下来配置文件出场:
     1<!-- other -->
     2  <!-- 配置bean3和bean4共用的部分抽取出来 -->
     3  <bean id="bean34" abstract="true"> <!--将这个类声明成抽象类 -->
     4     <property name="id" value="10"/>  <!-- 属性即是bean3和bean4两个类共有的元素.并赋值 -->
     5     <property name="name" value="tom"/>
     6  </bean>
     7  <!-- 配置bean3 和bean 4 -->
     8    <!-- 使用parent的值为上面注册的id:bean34. 相当于bean3继承bean34 -->
     9  <bean id="bean3" class="com.zyl.spring.Bean3" parent="bean34">
    10     <property name="password" value="1235"/>  <!-- 在bean3中只需配置公共部分没有的,自己独有的属性即可 -->
    11     <property name="name" value="这个在公共中有定义值.如果bean3中再定义.则以bean3覆盖原来的配置内容"></property>
    12  </bean>
    13  <bean id="bean4" class="com.zyl.spring.Bean4" parent="bean34"></bean>
    14  <!-- 以下配置bean3.4.5 -->
    15  <bean id="bean2" class="com.zyl.spring.Bean2">
    16      <property name="bean3" ref="bean3"/><!-- bean2用引用了bean3.4.5 -->
    17      <property name="bean4">
    18         <ref bean="bean4"/>  <!-- 这种写法和上面那种效果一样 -->
    19      </property>
    20      <property name="bean5" ref="bean5"/> <!-- name为bean2中定义的变量名,ref为配置文件的id名 -->
    21  </bean>  
    22  <bean id="bean5" class="com.zyl.spring.Bean5"> <!-- 接下来描述bean5的元素 -->
    23      <property name="age" value="10"/><!-- 设定值为10 -->
    24  </bean>
    1).注意看,第3行,定义公共的注入属性,通过<bean>标签定义,制定abstract=”true”.属性中抽取了Bean3和Bean4的公共部分.并且用value赋值(也可以用ref指向.)
    2).在第9行注册Bean3的时候, 使用parent标签,  指定parent属性值为定义的公共描述.有点类似继承公共描述的意思.
        这样Bean3的配置中就可以不配置公共描述的元素了.当然.如果想自己配置也可,独自的配置会覆盖公共的配置而起作用.
    3)Bean5并没有公共描述的东西,就一般配置下即可.见第20行.
    4.最后,写一下client端的程序
     1package test;
     2
     3import junit.framework.TestCase;
     4
     5import org.springframework.beans.factory.BeanFactory;
     6import org.springframework.context.support.ClassPathXmlApplicationContext;
     7
     8import com.zyl.spring.Bean1;
     9import com.zyl.spring.Bean2;
    10
    11
    12public class test extends TestCase {
    13public void testInjection2(){
    14        BeanFactory factory =new ClassPathXmlApplicationContext("gogogo-*.xml");//加上配置文件xml的名字
    15           
    16        Bean2 bean2=(Bean2)factory.getBean("bean2");//读取xml中id为bean2的东东
    17        
    18        System.out.println("bean2.bean3.id="+bean2.getBean3().getId());
    19        System.out.println("bean2.bean3.name="+bean2.getBean3().getName());
    20        System.out.println("bean2.bean3.password="+bean2.getBean3().getPassword());
    21        System.out.println("bean2.bean4.id="+bean2.getBean4().getId());
    22        System.out.println("bean2.bean4.name="+bean2.getBean4().getName());
    23        System.out.println("bean2.bean5.age="+bean2.getBean5().getAge());
    24    }

    25}

    26
    第16行这句: Bean2 bean2=(Bean2)factory.getBean("bean2"); spring帮忙我们从ioc容器中获取实例.
    然后就可以通过实例取得相应的属性.而这个bean2,每次实例化都会都是相同的一个.

    这样就大功告成.让我们见证奇迹发生的一刻:
    1bean2.bean3.id=10
    2bean2.bean3.name=这个在公共中有定义值.如果bean3中再定义.则以bean3覆盖原来的配置内容
    3bean2.bean3.password=1235
    4bean2.bean4.id=10
    5bean2.bean4.name=tom
    6bean2.bean5.age=10
    这篇就到这里吧. 有疑问可与我讨论. (虽然我也很菜.)
    P.S
    文中蓝色/红色字体进一步阐述:
    spring配置文件中bean的作用域
    1.scope取值: singleton (默认)
      每次调用getBean 返回相同的实例
    2.scope取值: prototype
      每次调用getBean 返回不同的实例
    见代码whyspringofioc2
    写个简单的bean789里面啥也不要.
    写个简单的test如下:
     1public void testScope(){
     2        
     3                BeanFactory factory =new ClassPathXmlApplicationContext("gogogo-*.xml");//加上配置文件xml的名字
     4               
     5                Bean789 bean1=(Bean789)factory.getBean("bean789");//bean789为xml中取的id名字
     6                Bean789 bean2=(Bean789)factory.getBean("bean789");
     7                if(bean1==bean2){
     8                    System.out.println("bean1和bean2指向同一地址");
     9                    
    10                }
    else{
    11                    System.out.println("bean1和bean2不指向同一地址");
    12                }

    13                
    14            }
    配置文件中注册下bean789即可
    我们执行会发现打印出 bean1和bean2指向同一地址.
    如果在配置文件修改为:
    1<bean id="bean789" class="com.zyl.spring.Bean789" scope="prototype">
    修改scope
    打印结果就会说明bean1和bean2指向不同的地址.


  • 相关阅读:
    scrollLeft、offsetLeft、clientLeft、clientHeight区分
    表格斜线
    td里的所有STYLE
    对输入框输入的数字进行格式控制,是很实用的效果
    MSComm控件使用详解
    如何用javascripr动态添加table?
    TeeChart的安装 delphi7
    DELPHI 字符串分割处理
    转正则表达式 简单
    求解:js函数在预编译期间的谜 简单
  • 原文地址:https://www.cnblogs.com/redcoatjk/p/3562434.html
Copyright © 2020-2023  润新知