• 【Spring 从0开始】IOC容器的Bean管理


    之前提到的 bean 是我们自己创建的,属于普通类型的 bean。还有一种是工厂 bean,属于 spring 中内置的一种类型。

    区别是什么?以此配置为例:

        <bean id="course2" class="com.pingguo.spring5.collectiontype.Course">
            <property name="course_name" value="毛氏面点课"></property>
        </bean>
    
    • 普通 bean:这里 class 中定义了类型是 Course,那么返回的类型就是 Course
    • 工厂 bean:对于工厂 bean来说,返回的类型可以和定义的类型不同。

    工厂 bean

    分两步走:

    • 第一步:创建类,让这个类作为工厂 bean,实现接口 FactoryBean。
    • 第二步:实现接口里的方法,在实现的方法中定义返回的类型。
    
    package com.pingguo.spring5.factorybean;
    
    import com.pingguo.spring5.collectiontype.Course;
    import org.springframework.beans.factory.FactoryBean;
    
    public class MyBean implements FactoryBean<Course> {
    
        // 定义返回 bean
        @Override
        public Course getObject() throws Exception {
            Course course = new Course();
            course.setCourseName("spring基础课程");
            return course;
        }
    
        @Override
        public Class<?> getObjectType() {
            return null;
        }
    
        @Override
        public boolean isSingleton() {
            return false;
        }
    }
    

    可以看到,虽然类中我定义的是 MyBean 类型,但是可以在实现接口的方法 getObject() 里返回的却是 Course 类型(这里要用到泛型类,加上 FactoryBean)。

    新建一个 bean3.xml配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="myBean" class="com.pingguo.spring5.factorybean.MyBean"></bean>
    </beans>
    

    然后在测试类中继续新增一个测试方法,看下效果:

        @Test
        public void test3() {
            ApplicationContext context =
                    new ClassPathXmlApplicationContext("bean3.xml");
            Course course = context.getBean("myBean", Course.class);
            System.out.println(course);
        }
    

    运行测试,查看结果:

    Course{course_name='spring基础课程'}
    
    Process finished with exit code 0
    
    --不要用肉体的勤奋,去掩盖思考的懒惰--
  • 相关阅读:
    免密码远程登录和远程操作
    1、linux网络服务实验 用PuTTY连接Linux
    巧用CAS解决数据一致性问题
    第一天
    图像处理02
    图像处理01
    Poem 01(转)
    CS229 Lecture 01
    日本語1
    latex测试
  • 原文地址:https://www.cnblogs.com/pingguo-softwaretesting/p/15083702.html
Copyright © 2020-2023  润新知