Spring学习笔记3:深入学习IOC

Spring学习笔记3:深入学习IOC

本文将在Spring学习笔记2:Spring概述及IOC的基础上,继续对Spring进行学习。

1.引用其他的bean

在实际应用中,一个bean中包含其他bean的情况是经常会发生的,下面通过例子来对这种情况进行学习。

//步骤1:在com.atguigu.ioc.bean包中添加,BookShop类
package com.atguigu.ioc.bean;

public class BookShop {

    //该类中包含了一个名称为myBook的Book类的成员
    private Book mybook;

    public BookShop() {}

    public Book getMybook() {
        return mybook;
    }

    public void setMybook(Book mybook) {
        this.mybook = mybook;
    }

    @Override
    public String toString() {
        return "BookShop [mybook=" + mybook + "]";
    }   
}
//步骤2:在beans.xml中添加如下配置
    <!-- 实验8:引用其他的bean  -->
    <bean id="bookShop01" class="com.atguigu.ioc.bean.BookShop">
        <!-- 通过设置ref,使用其他已经配置好的book给myBook属性赋值 -->
        <property name="mybook" ref="book03"></property>
    </bean>
//步骤3:创建测试方法    
    @Test
    public void test08()
    {
        BookShop bookShop = (BookShop)ioc.getBean("bookShop01");
        Book book = bookShop.getMybook();
        System.out.println(bookShop);
        System.out.println(book);
    }

运行结果如下:
这里写图片描述

2.引用内部bean

上面是例子讲的是外部bean的引用,同时SpringIOC也支持在一个bean中直接声明另一个bean的配置并将其引用,例子如下:

//步骤1:在BookShop类中田间Book innerBook属性,并添加get set方法、重写toString()
package com.atguigu.ioc.bean;

public class BookShop {
    //测试引用外部bean
    private Book mybook;
    //测试引用内部bean
    private Book innerBook;

    public BookShop() {}

    public Book getMybook() {
        return mybook;
    }

    public void setMybook(Book mybook) {
        this.mybook = mybook;
    }

    public Book getInnerBook() {
        return innerBook;
    }

    public void setInnerBook(Book innerBook) {
        this.innerBook = innerBook;
    }

    @Override
    public String toString() {
        return "BookShop [mybook=" + mybook + "]";
    }   

}
//步骤2:将配置文件beans.xml中的bookShop01修改如下:
    <!-- 实验9:引用内部bean -->
    <!-- 实验8:引用其他的bean  -->
    <bean id="bookShop01" class="com.atguigu.ioc.bean.BookShop">
        <!-- 使用其他已经配置好的book给myBook属性赋值 -->
        <property name="mybook" ref="book03"></property>
        <property name="innerBook">
            <!-- 这是一个内部Bean,就是个innerBook属性用的,因此可以不指定id值,
            内部配置的Bean在外部无法使用-->
            <bean class="com.atguigu.ioc.bean.Book">
                <property name="bookId" value="12345"/>
                <property name="bookName" value="innerName"/>
                <property name="author" value="innerAuthor"/>
                <property name="prive" value="23456"/>
                <property name="isbn" value="innerIsbn"></property>
            </bean>
        </property>
    </bean>
//步骤3:修改测试方法test08()如下:
    @Test
    public void test08()
    {
        BookShop bookShop = (BookShop)ioc.getBean("bookShop01");
        Book book = bookShop.getMybook();
        Book innerBook = bookShop.getInnerBook();
        System.out.println(bookShop);
        System.out.println(book);
        System.out.println(innerBook);
    }

程序运行结果如下:
这里写图片描述

3.为集合类型的属性赋值

SpringIOC支持为bean中的集合属性赋值,包括List、Map、Properties等。
1. 对于List来说,通常在beans.xml中的<property>下使用<list>标签,在list标签下使用<ref>标签(集合中存放的是bean类型)或<value>标签为集合属性赋值,例子如下:

//步骤1:在BookShop中添加bookList属性,并添加get set方法、重写toString()
package com.atguigu.ioc.bean;

import java.util.List;

public class BookShop {

    private Book mybook;
    private Book innerBook;

    private List<Book> bookList;

    public BookShop() {}

    public Book getMybook() {
        return mybook;
    }

    public void setMybook(Book mybook) {
        this.mybook = mybook;
    }


    public Book getInnerBook() {
        return innerBook;
    }

    public void setInnerBook(Book innerBook) {
        this.innerBook = innerBook;
    }


    public List<Book> getBookList() {
        return bookList;
    }

    public void setBookList(List<Book> bookList) {
        this.bookList = bookList;
    }

    @Override
    public String toString() {
        return "BookShop [mybook=" + mybook + ", innerBook=" + innerBook + ", bookList=" + bookList + "]";
    }

}
//步骤2:将配置文件beans.xml中的bookShop01修改如下:
    <!-- 实验9:引用内部bean -->
    <!-- 实验8:引用其他的bean  -->
    <bean id="bookShop01" class="com.atguigu.ioc.bean.BookShop">
        <property name="mybook" ref="book03"></property>
        <property name="innerBook">
            <bean class="com.atguigu.ioc.bean.Book">
                <property name="bookId" value="12345"/>
                <property name="bookName" value="innerName"/>
                <property name="author" value="innerAuthor"/>
                <property name="prive" value="23456"/>
                <property name="isbn" value="innerIsbn"></property>
            </bean>
        </property>
        <!-- 为集合属性赋值 -->
        <property name="bookList">
            <list>
                <ref bean="book01"/>
                <ref bean="book02"/>
                <ref bean="book03"/>
            </list>
        </property>
    </bean>
//步骤3:修改测试方法test08()如下:
    @Test
    public void test08()
    {
        BookShop bookShop = (BookShop)ioc.getBean("bookShop01");

        Book book = bookShop.getMybook();
        Book innerBook = bookShop.getInnerBook();
        List<Book> bookList = bookShop.getBookList();

        System.out.println("bookShop:" + bookShop);
        System.out.println("book:" + book);
        System.out.println("innerBook:" + innerBook);
        System.out.println("===list中的部分===");
        for (Book book2 : bookList) {
            System.out.println(book2);
        }

    }

程序运行结果如下:
这里写图片描述
2. 对于Map类型来说,其配置方法如下:

//步骤1:在BookShop中添加bookMap属性,并添加get set方法,就不贴代码了。
//步骤2:将配置文件beans.xml中的bookShop01修改如下:
    <bean id="bookShop01" class="com.atguigu.ioc.bean.BookShop">
        <property name="mybook" ref="book03"></property>
        <property name="innerBook">
            <bean class="com.atguigu.ioc.bean.Book">
                <property name="bookId" value="12345"/>
                <property name="bookName" value="innerName"/>
                <property name="author" value="innerAuthor"/>
                <property name="prive" value="23456"/>
                <property name="isbn" value="innerIsbn"></property>
            </bean>
        </property>
        <property name="bookList">
            <list>
                <ref bean="book01"/>
                <ref bean="book02"/>
                <ref bean="book03"/>
            </list>
        </property>
        <!-- 实验11:使用Map集合属性 -->
        <property name="bookMap">
            <map>
                <entry>
                    <key>
                        <value>key01</value>
                    </key>
                    <ref bean="book01"/>
                </entry>
                <entry>
                    <key>
                        <value>key01</value>
                    </key>
                    <ref bean="book01"/>
                </entry>
                <entry>
                    <key>
                        <value>key02</value>
                    </key>
                    <ref bean="book02"/>
                </entry>
            </map>
        </property>
    </bean>
  1. 对于Properties类型来说来说,因为Properties类是Map接口下,HashTable类的子类,它String类型的键值对的形式保存数据,如图所示:
    这里写图片描述
    其配置方法如下:
//步骤1:在BookShop中添加prop属性,并添加get set方法,就不贴代码了。
//步骤2:将配置文件beans.xml中的bookShop01修改如下:
    <bean id="bookShop01" class="com.atguigu.ioc.bean.BookShop">
        <property name="mybook" ref="book03"></property>
        <property name="innerBook">
            <bean class="com.atguigu.ioc.bean.Book">
                <property name="bookId" value="12345"/>
                <property name="bookName" value="innerName"/>
                <property name="author" value="innerAuthor"/>
                <property name="prive" value="23456"/>
                <property name="isbn" value="innerIsbn"></property>
            </bean>
        </property>
        <property name="bookList">
            <list>
                <ref bean="book01"/>
                <ref bean="book02"/>
                <ref bean="book03"/>
            </list>
        </property>
        <property name="bookMap">
            <map>
                <entry>
                    <key>
                        <value>key01</value>
                    </key>
                    <ref bean="book01"/>
                </entry>
                <entry>
                    <key>
                        <value>key01</value>
                    </key>
                    <ref bean="book01"/>
                </entry>
                <entry>
                    <key>
                        <value>key02</value>
                    </key>
                    <ref bean="book02"/>
                </entry>
            </map>
        </property>
        <!-- 实验12:使用Property子元素为Properties类型的属性赋值 -->
        <property name="prop">
            <props>
                <prop key="key01">propValue01</prop>
                <prop key="key02">propValue02</prop>
                <prop key="key03">propValue03</prop>
            </props>
        </property>
    </bean>
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值