• Bean详解(Spring)


    控制反转思想:反转Bean的创建权[反射机制],为了解决对象和对象之间的耦合,我们在Spring容器中声明一个bean对象

    <bean></bean>
    

    属性:

    id:唯一性标识


    class:全限定名

    它内部是一个全类名,通过它找到一个具体的实现类
    反射默认通过无参构造去创建对象,我们这样配置必须保证bean(指的UserDaoImpl)内部存在无参构造

    scope:指定对象的作用范围

    我们没有配置scope,默认就是singleton,为什么呢,因为用UserDaoImpl是作为方法对象,搞那么多对象没有意义。

    singleton,意味着在容器中存在的对象只有一个

    prototype,意味着从容器中拿bean对象时,有多个对象

    引入junit来研究对象个数和对象创建时机:

    改写UserDaoImpl类:



    导入坐标



    新建测试类



    scope为singleton的结果:

    地址全完一致,容器内只有一个对象。
    对象在加载配置文件applicationContext.xml时创建,只创建一次(只有一个对象的原因)



    scope为prototype的结果:

    地址不一致,容器内有多个对象。
    对象在getBean时创建,有几次getBean就创建几次(有多个对象的原因)






    Bean生命周期配置





    Bean创建的方式:

    无参构造方法实例化:我们上文使用的就是无参构造方法实例化




    有参构造

    UserDaoImpl类添加参数:



    配置文件报错



    使用Bean的子标签constructor-arg标签添加参数,有几个添加几个





    工厂静态方法实例化:特征是static getUserDao()静态方法

    无参构造方法实例化

    新建静态工厂类:


    getUserDao方法能返回一个UserDao类型的对象。

    配置文件改为:


    Spring调用前面这个Demo.factory.StaticFactory类名的getUserDaoMethod()静态方法,返回UserDao对象,并以UserDao为id存到容器(类似Map中的key,对象就是Map中的value)
    相当于UserDao getUserDaoInStatic = StaticFactory.getUserDaoMethod;
    加载配置文件的时候,先找到factory.staticFactory这个类,然后发现后面有factory-method属性,
    就找factory-method指定的getUserDaoMethod方法去返回userDao对象。

    有参构造方法实例化:与非工厂类的无参构造类似,使用Bean的子标签constructor-arg标签添加参数,有几个添加几个。


    工厂实例方法实例化:

    无参构造方法实例化:

    新建实例工厂类:


    配置文件改为:


    相当于:
    TheDynamicFactory = new DynamicFactory();
    UserDao getUserDaoInDynamic = TheDynamicFactory.getUserDaoMethod;
    加载配置文件时先找到实例工厂类,
    然后通过factory-bean属性进入这个工厂,再用factory-method属性从getUserDaoMethod方法中去获得userDao这个对象

    有参构造:使用Bean的子标签constructor-arg标签添加参数,有几个添加几个


  • 相关阅读:
    Win8 消费者预览版中文版下载地址 官方原版
    Easyui datagrid加载本地Json数据
    myeclipse 8.510.0 安装 svn 方法
    easyui tree使用方法
    安装Oracle 11g r2先决条件检查失败解决方法
    Win8/Win7或XP 双系统安装图文教程
    Oracle存储过程与函数
    MyEclipse 中 使用 TortoiseSVN(1)
    MyEclipse 中 使用 TortoiseSVN(2)
    easyui使用Ajax提交表单,返回Json数据
  • 原文地址:https://www.cnblogs.com/maomaodesu/p/12539660.html
Copyright © 2020-2023  润新知