zoukankan      html  css  js  c++  java
  • spring创建bean及数据注入

    通过spring的IoC可以实现由配置文件来创建类的对象,可以降低类鱼类之间的耦合,

    通常我们都是在代码中控制对象的生成和属性注入,而使用IoC后,就可以将设计好的类交给IoC容器,让容器去控制对象的生成和属性的注入,称为控制反转。生成对象的过程就是将对象依赖的属性进行注入的过程,因此也称依赖注入。

    1.实例化bean:通过无参构造;工厂静态方法;工厂非静态方法等

    2.属性注入:set方法注入;构造器(构造方法)注入

    各类属性的注入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-4.3.xsd">
        
    <!--     lazy-init="true" : true:需要用的时候才实例化bean,默认加载配置文件时候实例化bean -->
    <!--     init-method="init" 初始化bean,调用init方法 -->
    <!--     destroy-method="destroy"  销毁bean调用destroy方法 -->
    <!--     scope="prototype"    prototype:创建对象不是单例模式,默认singleton: 单例 -->
        <bean id="user" class="ni.jun.yang.bean.User" lazy-init="true" 
            init-method="init" destroy-method="destroy" scope="prototype">
            <!--构造赋值 -->
            <constructor-arg name="card" ref="payCard"/>
            <constructor-arg name="name" type="java.lang.String" value="zhangsan"/>
            <constructor-arg name="age" type="int" value="123"/>
        </bean>
        
        <bean id="user1" class="ni.jun.yang.bean.User" lazy-init="true"  scope="prototype">
            
            <!-- list集合注入值 -->
            <property name="cards">
                <list>
                    <ref bean="payCard"/>
                    <ref bean="payCard1"/>
                    <ref bean="payCard2"/>
                </list>
            </property>
            
            <!-- set集合注入值 -->
            <property name="setCards">
    
                <set>
                    <ref bean="payCard"/>
                    <ref bean="payCard1"/>
                    <ref bean="payCard2"/>
                </set>
            </property>
            
            <!-- map集合注入值 -->
            <property name="mapCards">
                <map>
                    <entry key="1" value-ref="payCard" ></entry>
                    <entry key="2" value-ref="payCard1"></entry>
                    <entry key="3" value-ref="payCard2"></entry>
                </map>        
            </property>
            
            <!--Properties集合注入值 -->        
            <property name="proCards">
                <props>
                    <prop key="1">中国银行</prop>
                    <prop key="2">农业银行</prop>
                    <prop key="3">建设银行</prop>
                </props>
            </property>
            
        </bean>
        
        <!--set方法赋值 -->
        <bean id="payCard" class="ni.jun.yang.bean.PayCard">
            <property name="id" value="98746546764"></property>
            <property name="bankName" value="中国银行"></property>
        </bean>
        <bean id="payCard1" class="ni.jun.yang.bean.PayCard">
            <property name="id" value="12365478932544"></property>
            <property name="bankName" value="农业银行"></property>
        </bean>
        <bean id="payCard2" class="ni.jun.yang.bean.PayCard">
            <property name="id" value="45678975456751"></property>
            <property name="bankName" value="建设银行"></property>
        </bean>
        
    </beans>

    对象的获取:

         ApplicationContext  ctxt = new ClassPathXmlApplicationContext("user-bean.xml");//配置文件名字
            User user = (User) ctxt.getBean("user"); //bean标签的id值

    3.自动装配:autowire=byName(通过属性名字)   autowire="byType" (通过类型)   autowire="constructor"(通过构造器)

    感觉不是很好用:

    byName主要是根据set方法来进行自动注入值的,相对靠谱

    byType 如果有多个值,就会出异常,它不知道到底该用哪个值去装配

    constructor :与 byType 非常相似

    感觉用自动装配,代码的可读性,不如手动装配注入,而且byType 这种方式容易出异常

  • 相关阅读:
    关于开发 Web AI 的思考(kendryte K210)
    怪不得我说,这几个月的代码数据都跑哪里去了....
    在 Android 上使用蓝牙作为主机进行一对多从机传输数据的实测,理论 5
    写了一下 micropython 的文件系统单元测试
    mark 自己未来要写一下,蓝牙主机一对多从机和 K210 的网络通信优化过程。
    VUE实现Studio管理后台(五):手风琴式折叠组件(Accordion)
    VUE实现Studio管理后台(四):状态模式实现窗口停靠,灵动、自由
    VUE实现Studio管理后台(三):支持多语言国际化(vue-i18n)
    VUE实现Studio管理后台(二):Slot实现选项卡tab切换效果,可自由填装内容
    VUE实现Studio管理后台(一):鼠标拖放改变窗口大小
  • 原文地址:https://www.cnblogs.com/nijunyang/p/7688292.html
Copyright © 2011-2022 走看看