zoukankan      html  css  js  c++  java
  • 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标签添加参数,有几个添加几个


  • 相关阅读:
    开启nginx缓存
    xsl输出html代码 非闭合
    记一次网络波动导致druid连接池无法创建新连接的BUG
    mysql时间操作
    JVM知识点精华汇总
    java 基础 ---HashMap、HashTable
    java面试--小谈如何面试
    Spring框架
    JAVA+微信支付APP开发+支付宝支付APP开发
    消息队列
  • 原文地址:https://www.cnblogs.com/maomaodesu/p/12539660.html
Copyright © 2011-2022 走看看