zoukankan      html  css  js  c++  java
  • Spring的DI(Dependency Injection)

      写在之前,作为正在学习的程序员,对于Spring理解比较差,给两个简单的定义大家看一下。

    控制反转(Inversion of Control),是一个重要的面向对象编程法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心beans

    DI依赖注入:说的是创建对象实例时,为这个对象注入属性值其它对象实例,侧重于实现。

    今天的博客主要写的是DI,所以我们看的是实现,而不是思想。

    首相我们先来看最简单的set方法注入

    我们准备一个实体类就可以做第一个例子,

    publi class Users(){
       private String name;
    
        private Integer age;
    }
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
      <!-- <context:component-scan base-package="cn.curry"></context:component-scan>
    -->
        <bean id="users" class="cn.curry.spring.Users">
            <property name="name" value="呵呵"></property>
        </bean>

    上面是我们的部分配置文件。

    最后我们看简单的测试

     @Test
        public void test01(){
            Resource resource=new ClassPathResource("applicationContext.xml");
            BeanFactory bf=new XmlBeanFactory(resource);
            Users users=(Users)bf.getBean("users");
            Users userss=(Users)bf.getBean("users");
            System.out.println(users==userss);
            System.out.println(users.getName());
        }

    然后我们再看域属性注入和P命名空间注入

    这时我们会添加第二个实体类,并且在Users类里加一个构造

    public Users() {
            System.out.println("Object Init");
        }
    
        public Users(String name, Integer age, Car car) {
            this.name = name;
            this.age = age;
            this.car = car;
        }
    public class Car {private String color;
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    }

    配置文件

    <bean id="us2" class="cn.curry.spring.Users">
            <constructor-arg index="0" value="花花"></constructor-arg>
            <constructor-arg index="1" value="12"></constructor-arg>
            <constructor-arg index="2" ref="car"></constructor-arg>
        </bean>
    
        <bean id="usersP" class="cn.curry.spring.Users" p:name="花花" p:age="12" p:car-ref="car"></bean>

    看测试

    @Test
        public void test02(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Users users=(Users) context.getBean("us2");
            System.out.println(users.getCar().getColor()+" "+users.getName());
    
        }
        @Test
        public void test03(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Users users=(Users) context.getBean("usersP");
            System.out.println(users.getCar().getColor()+" "+users.getName());
        }

    然后看集合属性注入

    先修改Users,添加集合属性

        private List<Car> list;
    
        private Set<Car> set;
    
        private Map<Integer,Car> map;

    在看配置文件

    <bean id="uslist" class="cn.curry.spring.Users">
            <property name="list">
                <list>
                    <ref bean="car"></ref>
                </list>
            </property>
        </bean>
    
        <bean id="usset" class="cn.curry.spring.Users">
            <property name="set">
                <set>
                    <ref bean="car"></ref>
                </set>
            </property>
        </bean>
        <bean id="usmap" class="cn.curry.spring.Users">
            <property name="map">
                <map>
                    <entry key="1" value-ref="car"></entry>
                </map>
            </property>
        </bean>

    在看测试

    @Test
        public void test04(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Users users=(Users) context.getBean("uslist");
            List<Car> list = users.getList();
            for (Car item : list) {
                System.out.println(item.getColor());
            }
        }
        @Test
        public void test05(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Users users=(Users) context.getBean("usset");
            Set<Car> set = users.getSet();
            for (Car item : set) {
                System.out.println(item.getColor());
            }
        }
        @Test
        public void test06(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Users users=(Users) context.getBean("usmap");
            Map<Integer, Car> map = users.getMap();
            for (Integer item : map.keySet()) {
                System.out.println(map.get(item).getColor());
            }
        }

    最后我们看一下注解这时配置只需一句话

    <context:component-scan base-package="cn.curry"></context:component-scan>

    然后看我们的实体类

    package cn.curry.spring;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.Resource;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * Created by Curry on 2017/3/25.
     */
    @Component("usss")
    public class Users {
        @Value("赫尔")
        private String name;
        @Value("18")
        private Integer age;
        //@Resource(name="car")
        @Autowired
        @Qualifier("car")
        private Car car;
        private List<Car> list;
    
        private Set<Car> set;
    
        private Map<Integer,Car> map;
    
        public Users() {
            System.out.println("Object Init");
        }
    
        public Users(String name, Integer age, Car car) {
            this.name = name;
            this.age = age;
            this.car = car;
        }
    
        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;
        }
    
        public List<Car> getList() {
            return list;
        }
    
        public void setList(List<Car> list) {
            this.list = list;
        }
    
        public Set<Car> getSet() {
            return set;
        }
    
        public void setSet(Set<Car> set) {
            this.set = set;
        }
    
        public Map<Integer, Car> getMap() {
            return map;
        }
    
        public void setMap(Map<Integer, Car> map) {
            this.map = map;
        }
    }
    package cn.curry.spring;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    import org.springframework.stereotype.Controller;
    import org.springframework.stereotype.Repository;
    import org.springframework.stereotype.Service;
    
    /**
     * Created by Curry on 2017/3/25.
     */
    @Component("car")
    //@Service
    //@Controller
    //@Repository
    public class Car {
        @Value("黄色")
        private String color;
    
        public String getColor() {
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    }

    最后一个测试

    package cn.curry.test;
    
    import cn.curry.spring.Car;
    import cn.curry.spring.Users;
    import org.junit.Test;
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;
    
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * Created by Curry on 2017/3/25.
     */
    public class MyTest {
        @Test
        public void test01(){
            Resource resource=new ClassPathResource("applicationContext.xml");
            BeanFactory bf=new XmlBeanFactory(resource);
            Users users=(Users)bf.getBean("users");
            Users userss=(Users)bf.getBean("users");
            System.out.println(users==userss);
            System.out.println(users.getName());
        }
        @Test
        public void test02(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Users users=(Users) context.getBean("us2");
            System.out.println(users.getCar().getColor()+" "+users.getName());
    
        }
        @Test
        public void test03(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Users users=(Users) context.getBean("usersP");
            System.out.println(users.getCar().getColor()+" "+users.getName());
        }
        @Test
        public void test04(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Users users=(Users) context.getBean("uslist");
            List<Car> list = users.getList();
            for (Car item : list) {
                System.out.println(item.getColor());
            }
        }
        @Test
        public void test05(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Users users=(Users) context.getBean("usset");
            Set<Car> set = users.getSet();
            for (Car item : set) {
                System.out.println(item.getColor());
            }
        }
        @Test
        public void test06(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Users users=(Users) context.getBean("usmap");
            Map<Integer, Car> map = users.getMap();
            for (Integer item : map.keySet()) {
                System.out.println(map.get(item).getColor());
            }
        }
        @Test
        public void test07(){
            ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
            Users users=(Users) context.getBean("usss");
            System.out.println(users.getName()+"   "+users.getCar().getColor());
        }
    }
  • 相关阅读:
    文件上传-pubsec-文件上传大小限制
    编写 .gitignore 文件
    Git 创建点开头的文件和目录
    Git 克隆远程仓库到本地
    redis 在 windows 中的安装
    查看数据库字符集和排序规则
    centos 6 和centos 7 系统下vnc配置
    centos 6 下KVM 安装学习之旅
    Centos 下使用VLAN+Bridge 搭建KVM基础网络环境
    centos 6 KVM 网卡桥接配置
  • 原文地址:https://www.cnblogs.com/wei-91/p/6617452.html
Copyright © 2011-2022 走看看