zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    BZOJ5212 ZJOI2018历史(LCT)
    BZOJ5127 数据校验
    253. Meeting Rooms II
    311. Sparse Matrix Multiplication
    254. Factor Combinations
    250. Count Univalue Subtrees
    259. 3Sum Smaller
    156. Binary Tree Upside Down
    360. Sort Transformed Array
    348. Design Tic-Tac-Toe
  • 原文地址:https://www.cnblogs.com/houchen/p/13162003.html
Copyright © 2011-2022 走看看