• Spring属性注入、构造方法注入、工厂注入以及注入参数(转)


    Spring 是一个开源框架.

    Spring 为简化企业级应用开发而生(对比EJB2.0来说). 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能。
    Spring 是一个 IOC(DI) 和 AOP 容器框架。

    具体描述 Spring:
    轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API
    控制反转(依赖注入) (IOC----inverse of control 、DI --- dependency injection)
    面向切面编程(AOP --- aspect oriented programming)
    容器: Spring 是一个容器, 因为它包含并且管理应用对象的生命周期
    框架: Spring 实现了使用简单的组件配置组合成一个复杂的应用. 在 Spring 中可以使用 XML 和 Java 注解组合这些对象
    一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库 (实际上 Spring 自身也提供了展现层的 SpringMVC 和 持久层的 Spring JDBC)

    所需jar包

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?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">
     
        <bean name="dog" class="com.zhiqi.entity.Dog"></bean>
         
    </beans>

      装配一个Bean

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package com.zhiqi.entity;
     
    public class Dog {
     
        private String name;
     
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
     
    }

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    package com.zhiqi.test;
     
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
     
    import com.zhiqi.entity.Dog;
     
    public class T {
     
        public static void main(String[] args) {
            ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
            Dog dog=(Dog)ac.getBean("dog");
            System.out.println(dog.getName());
        }
    }

      

    此时装配了Dog这个类,但是为null

    需要进行依赖注入(属性注入、构造方法注入,工厂注入)

    1、属性注入:

    装配一个员工类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    package com.zhiqi.entity;
     
    public class Employee {
     
        private int id;
        private String name;
        private String sex;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
    }

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    package com.zhiqi.test;
     
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
     
    import com.zhiqi.entity.Dog;
    import com.zhiqi.entity.Employee;
     
    public class T {
     
        public static void main(String[] args) {
            ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
            Employee employee=(Employee)ac.getBean("employee");
            System.out.println(employee.getName());
        }
    }

      

    属性注入如下:<property name="" value=""></property>

    1
    2
    3
    4
    5
    <bean name="employee" class="com.zhiqi.entity.Employee">
            <property name="id" value="10050"></property>
            <property name="name" value="小鲜肉"></property>
            <property name="sex" value="男"></property>
        </bean>

    构造方法注入一(通过类型):<constructor-arg type="" value=""></constructor-arg>

    1
    2
    3
    4
    5
    <bean name="employee" class="com.zhiqi.entity.Employee">
            <constructor-arg type="int" value="10010"></constructor-arg>
            <constructor-arg type="String" value="小萝莉"></constructor-arg>
            <constructor-arg type="String" value="女"></constructor-arg>
        </bean>

      此时需要写构造函数否则会报错:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class Employee {
     
        private int id;
        private String name;
        private String sex;
         
        public Employee() {
            super();
            // TODO Auto-generated constructor stub
        }
        public Employee(int id, String name, String sex) {
            super();
            this.id = id;
            this.name = name;
            this.sex = sex;
        }
    }

      

    构造方法注入二(通过索引):<constructor-arg index="" value=""></constructor-arg>   索引从0开始

    1
    2
    3
    4
    5
    <bean name="employee" class="com.zhiqi.entity.Employee">
            <constructor-arg index="0" value="10010"></constructor-arg>
            <constructor-arg index="1" value="小萝莉"></constructor-arg>
            <constructor-arg index="2" value="女"></constructor-arg>
        </bean>

     可以混合使用 类型+索引

    1
    2
    3
    4
    5
    <bean name="employee" class="com.zhiqi.entity.Employee">
            <constructor-arg type="int" index="0" value="10010"></constructor-arg>
            <constructor-arg type="String" index="1" value="小萝莉"></constructor-arg>
            <constructor-arg type="String" index="2" value="女"></constructor-arg>
        </bean>

    通过工厂注入:<bean name="employee" factory-bean="" factory-method=""></bean>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    package com.zhiqi.factory;
     
    import com.zhiqi.entity.Employee;
     
    public class EmployeeFactory {
     
        public Employee createEmployee(){
            Employee employee=new Employee();
            employee.setId(10080);
            employee.setName("小霸王");
            employee.setSex("男");
            return employee;
        }
    }

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?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">
     
        <bean name="dog" class="com.zhiqi.entity.Dog"></bean>
         
        <bean name="employeeFactory" class="com.zhiqi.factory.EmployeeFactory"></bean>
        <bean name="employee" factory-bean="employeeFactory" factory-method="createEmployee"></bean>
         
    </beans>

      

    通过静态工厂注入:

    注入参数:

    1、基本类型值

    2、注入bean

    3、内部bean

    4、null值

    5、级联属性

    6、集合注入(List、Set、Map)

    员工有一辆车

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <bean id="employee" class="com.zhiqi.entity.Employee">
            <property name="id" value="10060"></property>
            <property name="name" value="脑残粉"></property>
            <property name="sex" value="女"></property>
            <property name="car" ref="car"></property>
        </bean>
        <bean id="car" class="com.zhiqi.entity.Car">
            <property name="name" value="别克"></property>
        </bean>

      

    一辆车只属于某员工,内部bean

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <bean id="employee" class="com.zhiqi.entity.Employee">
            <property name="id" value="10060"></property>
            <property name="name" value="脑残粉"></property>
            <property name="sex" value="女"></property>
            <property name="car">
                <bean class="com.zhiqi.entity.Car">
                    <property name="name" value="雪佛兰"></property>
                </bean>
            </property>
        </bean>

      

    有一个员工没有车

    1
    2
    3
    4
    5
    6
    7
    8
    <bean id="employee" class="com.zhiqi.entity.Employee">
            <property name="id" value="10060"></property>
            <property name="name" value="脑残粉"></property>
            <property name="sex" value="女"></property>
            <property name="car">
                <null></null>
            </property>
        </bean>

      

     级联

    1
    2
    3
    4
    5
    6
    <bean id="employee" class="com.zhiqi.entity.Employee">
            <property name="id" value="10060"></property>
            <property name="name" value="脑残粉"></property>
            <property name="sex" value="女"></property>
            <property name="car.name" value="好车"></property>
        </bean>

      此时在Car中new一个

    一个员工有多个girlFriend

    1
    2
    3
    4
    5
    private int id;
        private String name;
        private String sex;
        private Car car;
        private List<String> girlFriend=new ArrayList<String>();

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?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">
         
        <bean id="employee" class="com.zhiqi.entity.Employee">
            <property name="id" value="10060"></property>
            <property name="name" value="脑残粉"></property>
            <property name="sex" value="女"></property>
            <property name="car" value="宾利"></property>
            <property name="girlFriend">
                <list>
                    <value>琪琪</value>
                    <value>丽丽</value>
                    <value>小莫</value>
                </list>
            </property>
        </bean>
     
    </beans>

      

    一个员工有多套房子

    private Set<String> house=new HashSet<String>();

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <?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">
         
        <bean id="employee" class="com.zhiqi.entity.Employee">
            <property name="id" value="10060"></property>
            <property name="name" value="脑残粉"></property>
            <property name="sex" value="女"></property>
            <property name="car" value="宾利"></property>
            <property name="girlFriend">
                <list>
                    <value>琪琪</value>
                    <value>丽丽</value>
                    <value>小莫</value>
                </list>
            </property>
            <property name="house">
                <set>
                    <value>房子1</value>
                    <value>别墅2</value>
                </set>
            </property>
        </bean>
     
    </beans>

      一个员工的工作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?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">
         
        <bean id="employee" class="com.zhiqi.entity.Employee">
            <property name="id" value="10060"></property>
            <property name="name" value="脑残粉"></property>
            <property name="sex" value="女"></property>
            <property name="car" value="宾利"></property>
            <property name="girlFriend">
                <list>
                    <value>琪琪</value>
                    <value>丽丽</value>
                    <value>小莫</value>
                </list>
            </property>
            <property name="house">
                <set>
                    <value>房子1</value>
                    <value>别墅2</value>
                </set>
            </property>
            <property name="works">
                <map>
                    <entry>
                        <key><value>上午</value></key>
                        <value>撸代码</value>
                    </entry>
                    <entry>
                        <key><value>下午</value></key>
                        <value>找BUG</value>
                    </entry>
                </map>
            </property>
        </bean>
     
    </beans>

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package com.zhiqi.test;
     
    import java.util.Iterator;
     
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
     
    import com.zhiqi.entity.Employee;
     
    public class T {
     
        public static void main(String[] args) {
            ApplicationContext ac=new ClassPathXmlApplicationContext("beans.xml");
            Employee employee=(Employee)ac.getBean("employee");
            for(String str:employee.getHouse()){
                System.out.println(str);
            }
            //entrySet()将map转为set,然后迭代器遍历
            Iterator it=employee.getWorks().entrySet().iterator();
            while(it.hasNext()){
                System.out.println(it.next());
            }
        }
    }
    •   
  • 相关阅读:
    jacman主题分页出现问题(Next<span></span>)
    后会有期(非技术)
    再谈前端性能优化
    emmet常用指令组合
    imagemagick在windows下安装(转,有改动)
    nth-child和蝉原则实现的奇妙随机效果(译)
    flex布局浅谈和实例
    css命名那些事儿
    chrome开发者工具浅析--timeline
    浏览器历史和发展趋势浅析
  • 原文地址:https://www.cnblogs.com/hq233/p/6625218.html
Copyright © 2020-2023  润新知