• spring中 属性注入的四种方式


    1、set方法注入

    配置:

       <!-- set 方式属性注入 -->
        <bean name="user" class="cn.itcast.bean.User">
            <!--为User对象中  名为name的属性注入  tom 作为值 -->
                <!-- 值类型注入  -->
            <property name="name" value="tom"></property>
            <property name="age" value="18"></property>
                  <!-- 引用类型注入  -->
            <property name="car" ref="car"></property>
        </bean>
    
        <!-- 将Car对象配置到容器中 -->
        <bean name="car" class="cn.itcast.bean.Car">
            <property name="name" value="兰博基尼"></property>
            <property name="color" value="黄色"></property>
        </bean>
    //测试demo
    public class Demo {
        
        @Test
        public void test(){
            //1、创建容器对象
            ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml");
            //2、像容器要User对象
            User user = (User)ac.getBean("user");
            //3、打印user对象
            System.out.println(user.toString());
        }
        
    }

    结果:

    1592486545(1)

    2、构造方法注入

    配置:

    <!-- 构造函数注入 -->
        <bean name="user1" class="cn.itcast.bean.User">
            <constructor-arg name="name" value="jerry"></constructor-arg>
            <constructor-arg name="car" ref="car"></constructor-arg>
        </bean>

    实体:

    package cn.itcast.bean;
    
    public class User {
        private String name;
        private Integer age;
        
        private Car car;
        
        
        public User(String name, Car car) {
            System.out.println("User(String name, Car car)");
            this.name = name;
            this.car = car;
        }
        
        public User(Integer name, Car car) {
            System.out.println("User(Integer name, Car car)");
            this.name = name+"";
            this.car = car;
        }
    
        public User(){
            System.out.println("user对象空参构造");
        }
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Integer getAge() {
            return age;
        }
        public void setAge(Integer age) {
            this.age = age;
        }
    
        public Car getCar() {
            return car;
        }
    
        public void setCar(Car car) {
            this.car = car;
        }
    
        @Override
        public String toString() {
            return "User [name=" + name + ", age=" + age + ", car=" + car.toString() + "]";
        }
        
    }

    demo

    public class Demo {
        
        @Test
        public void test(){
            //1、创建容器对象
            ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml");
            //2、像容器要User对象
            User user = (User)ac.getBean("user1");
            //3、打印user对象
            System.out.println(user.toString());
        }
        
    }

    结果

    1592487576(1)

    由 name+index + type 可以任意指定一个构造参数

    <!-- 构造函数注入 -->
        <bean name="user1" class="cn.itcast.bean.User">
            <!--name属性: 构造参数的参数名  -->
            <!--name属性: 构造参数的索引  -->
            <!--name属性: 构造参数的类型  -->
            <constructor-arg name="name" index="0" type="java.lang.Integer" value="jerry"></constructor-arg>
            <constructor-arg name="car" ref="car"></constructor-arg>
        </bean>

    3、p名称空间注入

    配置

    <!-- p名称空间注入 -->
        <!-- 
            1、导入p名称空间     xmlns="http://www.springframework.org/schema/beans" 
            2、使用 p:属性 完成属性注入   
                值类型     p:属性名=值
                对象类型:  p:属性名-ref ="对象名称"
            
          -->
        <bean name="user3" class="cn.itcast.bean.User" p:name="jack" p:age="20" p:car-ref="car">
        </bean>

    demo

    public class Demo {
        
        @Test
        public void test(){
            //1、创建容器对象
            ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml");
            //2、像容器要User对象
            User user = (User)ac.getBean("user3");
            //3、打印user对象
            System.out.println(user.toString());
        }
        
    }

    结果:

    1592489039(1)

    4、spel注入

    配置:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
        
         <!-- set 方式属性注入 -->
        <bean name="user" class="cn.itcast.bean.User">
            <!--为User对象中  名为name的属性注入  tom 作为值 -->
            <property name="name" value="tom"></property>
            <property name="age" value="18"></property>
            <property name="car" ref="car"></property>
        </bean>
    
        <!-- 将Car对象配置到容器中 -->
        <bean name="car" class="cn.itcast.bean.Car">
            <property name="name" value="兰博基尼"></property>
            <property name="color" value="黄色"></property>
        </bean>
        
        <!-- 构造函数注入 -->
        <bean name="user1" class="cn.itcast.bean.User">
            <!--name属性: 构造参数的参数名  -->
            <!--name属性: 构造参数的索引  -->
            <!--name属性: 构造参数的类型  -->
            <constructor-arg name="name" index="0" type="java.lang.Integer" value="18"></constructor-arg>
            <constructor-arg name="car" ref="car"></constructor-arg>
        </bean>
        
        <!-- p名称空间注入 -->
        <!-- 
            1、导入p名称空间     xmlns="http://www.springframework.org/schema/beans" 
            2、使用 p:属性 完成属性注入   
                值类型     p:属性名=值
                对象类型:  p:属性名-ref ="对象名称"
            
          -->
        <bean name="user3" class="cn.itcast.bean.User" p:name="jack" p:age="20" p:car-ref="car">
        </bean>
        
        
        <!-- spel 注入  -->
        <bean name="user4" class="cn.itcast.bean.User">
            <property name="name" value="#{user.name}"></property>
            <property name="age" value="#{12}"></property>
            <property name="car" ref="car"></property>
        </bean>
    </beans>

    demo

    public class Demo {
        
        @Test
        public void test(){
            //1、创建容器对象
            ApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/injection/applicationContext.xml");
            //2、像容器要User对象
            User user = (User)ac.getBean("user4");
            //3、打印user对象
            System.out.println(user.toString());
        }
        
    }

    结果

    1592536554

  • 相关阅读:
    服务端渲染
    node基础
    vue不同组件间的通信
    mui底部导航栏
    在mui中引入自定义的字体图标
    axios的使用
    vue多视图
    多元线性回归:波士顿房价预测问题TesnsorFlow实战
    MNIST手写数字识别:分类应用入门(实践篇)
    7-3 java高级 22_19寻找最大块的问题 (20 分)
  • 原文地址:https://www.cnblogs.com/houchen/p/13162003.html
Copyright © 2020-2023  润新知