zoukankan      html  css  js  c++  java
  • Spring IOC(二)

    创建bean对象

    Student类:

    class Student{
        private String name;
        private String className;
        private Integer age;
        private Date now;
        public Student(){}
        public Student(String name,String className,Integer age,Date now){
            this.name=name;
            this.className=className;
            this.age=age;
            this.now=now;
        }
        //省略setter和getter
    }
    

    1、无参构造方法

    <bean id="student1" class="com.mystudy.entity.Student"></bean>
    

    2、有参构造方法

    <bean id="now" class="java.lang.Date"></bean>
    <bean id="student" class="com.mystudy.entity.Student">
    	<constructor-arg name="name" value="张三"/>
        <constructor-arg name="className" value="五年3班"/>
        <constructor-arg name="age" value="12"/>
        <constructor-arg name="current" ref="now"/>
    </bean>
    

    有参构造方法,借助constructor-arg标签注入值

    (1)往哪里注入

    name:形参名,常用,形参名

    index:形参数组下标,从0开始。不常用

    type:形参类型。不常用

    在spring中,类型和类名一般指全路径类名

    (2)注入的值

    value:直接注入基本数据类型或字符串的值

    ref:引入其它bean

    3、工厂静态方法

    也指普通静态方法

    工厂类:

    class StudentFactory{
        static Student getStudent(){
            return new Student();
        }
    }
    

    spring配置:

    <bean id="user3" class="com.mystudy.entity.StudentFactory" factory-method="getStudent">
    

    4、工厂方法

    也指普通方法

    工厂类:

    class StudentFactory{
        Student getStudent2(){
            return new Student();
        }
    }
    

    spring配置:

    <bean id="studentFactory" class="com.mystudy.entity.StudentFactory"></bean>
    <bean id="user4" class="com.mystudy.entity.Student" factory-bean="studentFactory" factory-method="getStudent2">
    

    注入属性值

    1、有参构造方法

    2、set方法

    <bean id="now" class="java.lang.Date"></bean>
    <bean id="student" class="com.mystudy.entity.Student">
    	<property name="name" value="张三"/>
        <property name="className" value="五年3班"/>
        <property name="age" value="12"/>
        <property name="current" ref="now"/>
    </bean>
    

    set方法,借助property标签注入值。
    set方法,需要默认构造方法和每个属性的set方法。
    (1)往哪里注入
    name:形参名
    set方法没有index和type属性
    (2)注入的值
    value:直接注入基本数据类型或字符串的值
    ref:引入其它bean
    3、p命名空间
    本质还是调用set方法

    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:p="http://www.springframework.org/schema/p"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
            https://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="user6" class="com.tj.entity.User"
            p:name="张三" p:className="五年3班" p:age="12" p:current-ref="now" >
        </bean>
        <bean id="now" class="java.lang.Date"></bean>
    </beans>
    
    • p命名空间需要引入单独的一条约束
    • p:username直接注入,p:username-ref注入其它bean对象

    4、SpEL

     <property name="username" value="#{表达式}"/>
    

    数字值和字符串值:#{123}, #{'zhangsan'}
    引用其他bean值:#{bean的id},注意这里仍然是为value赋值而不是ref
    引用其他bean的属性:#{bean的id.属性名}
    执行其他bean的方法:#{bean的id.方法名}
    引用静态方法或属性:#{T(类路径).属性名/方法名}

    5、自动装配

    前提:需要给对应的属性设置set方法
    针对单个bean的配置
    如果当前People类中的属性名和某个bean的id名一致,那么Spring会自动将bean对象赋值给属性

    <bean id="student7" class="com.yaorange.entity.Student" autowire="byName"/>
    

    如果当前People类中的属性的数据类型和某个bean的Class一致,那么Spring会自动将bean对象赋值给属性

    <bean id="student8" class="com.yaorange.entity.Student" autowire="byType"/>
    

    提示:基于类型的自动注入必须保证在整个Spring容器中只有唯一的一个bean类型满足要求
    配置全局(针对所有bean的配置)

    <?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" default-autowire="byType">
    

    注入集合

    注入集合数据
    List结构的: array,list,set
    Map结构的 map,entry,props,prop
    只要结构相同,标签可以互换

    <!-- 给数组注入数据 --> 
    <property name="myStrs"> 
        <set> 
            <value>AAA</value> 
            <value>BBB</value> 
            <value>CCC</value> 
        </set> 
    </property> 
    <!-- 注入list集合数据 --> 
    <property name="myList"> 
        <array> 
            <value>AAA</value> 
            <value>BBB</value> 
            <value>CCC</value> 
        </array> 
    </property> 
    <!-- 注入set集合数据 --> 
    <property name="mySet"> 
        <list> 
            <value>AAA</value> 
            <value>BBB</value> 
            <value>CCC</value> 
        </list> 
    </property> 
    <!-- 注入Map数据 --> 
    <property name="myMap"> 
        <props> 
            <prop key="testA">aaa</prop> 
            <prop key="testB">bbb</prop> 
        </props> 
    </property> 
    <!-- 注入properties数据 -->
    <property name="myProps"> 
        <map> 
            <entry key="testA" value="aaa">/entry> 
            <entry key="testB"> <value>bbb</value> </entry> 
        </map> 
    </property> 
    
  • 相关阅读:
    海康 大华 华为 宇视等安防摄像头、NVR、平台网关通过GB28181接入LiveGBS流媒体服务实现WEB无插件直播
    工厂模式
    装饰者模式
    观察者模式
    Android 滑动事件冲突解决 Touch事件处理机制
    java 策略模式
    java判断手机访问还是电脑访问
    swift中闭包和OC中block的用法比较
    Swift小技巧(五)
    Swift小技巧(三)
  • 原文地址:https://www.cnblogs.com/heibaimao123/p/13793213.html
Copyright © 2011-2022 走看看