04 Spring框架 依赖注入(一)

上一节我们讲了几个bean的一些属性,用来限制我们实例创建过后的状态。

但是细心的我们会发现其实上面demo创建的实例并不完整,对象创建出来过后只有一个方法,而没有包含其他信息(如属性)。

之前我们说了Spring的核心是IOC,这是使用Spring其他组件的前提条件。这里我们做一下补充:Spring依赖IOC,而IOC依赖注入。

什么是注入

注入就是在Spring主配置文件bean中添加一些信息使得新创建的实体类能够带有属性值(这里的属性值可以是其他实例的对象)。

接下来就该看看注入有哪些方法了。注入一共有三种:

①setter注入 
②构造器注入 
③接口注入

第一种使用的比较频繁,其他两种尤其是第三种几乎不会使用。所以我们只讲前两种。

首先来讲setter注入:

在主配置文件中即applicationContext.xml中:

<!--set注入  -->

</bean>
<bean id="c2" class="com.Spring.Demo.Computer">
<property name="cpu" value="高通骁龙"></property>
<property name="hdd" value="希捷"></property>
<property name="mainbord" value="华硕"></property>
</bean >

这个就是bean的内容了,相比之前有了一点变化多了三项propertiy,里边包含name值和value值。这个是applicationContext.xml中的变化。 
接下来实体类也同样需要变化一下:

实体类Computer:

package com.Spring.Demo;
//set注入
public class Computer {
    private String cpu;
    private String hdd;
    private String mainbord;
    public void execute(){
        System.out.println("cpu:"+cpu);
        System.out.println("hdd:"+hdd);
        System.out.println("mainbord:"+mainbord);

    }
    public String getCpu() {
        return cpu;
    }
    public void setCpu(String cpu) {
        this.cpu = cpu;
    }
    public String getHdd() {
        return hdd;
    }
    public void setHdd(String hdd) {
        this.hdd = hdd;
    }
    public String getMainbord() {
        return mainbord;
    }
    public void setMainbord(String mainbord) {
        this.mainbord = mainbord;
    }
}

对,这个实体类相比之前多了三个属性,同时增加了setter和getter方法和系统输出方法(系统输出方法是用来测试显示实例是否成功用的),其中setter方法是必须的,getter方法只是顺带添加了,以防备后边会用到。

接下来我们测试一下:

package com.Spring.Demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
//set注入
public class TestComputer {
    public static void main(String[] args){
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        Computer c2=(Computer)ac.getBean("c2");
        c2.execute();
    }

}

控制台输出:

cpu:高通骁龙
hdd:希捷
mainbord:华硕

这样我们就把computer的信息注入进来了(是不是很神奇?)。

但是我们注入的要是一个引用类型的值怎么办?

例如一本书,它有一个书名,书号,出版社,但是出版社是一个引用类型(包含出版社名,出版社地址)。这样的情况我们怎么办呢?

看下面的示例:

<bean id = "book" class = "com.testSpring.Book">
        <property name = "bname" value = "Java技术"></property>
        <property name = "bnumber" value ="201410185732" ></property><!--通过使用ref来注入引用类型-->
        <property name = "bpub" ref = "publisher"></property>
    </bean>

    <bean id = "publisher" class="com.testSpring.publisher">
        <property name="name" value="清华大学出版社"></property>
        <property name="address" value="xxxx"></property>
    </bean>
package com.testSpring;

public class Book {
    private String bname;
    private String bnumber;
    private publisher bpub;

    public void setBname(String bname) {
        this.bname = bname;
    }
    public void setBnumber(String bnumber) {
        this.bnumber = bnumber;
    }
    public void setBpub(publisher bpub) {
        this.bpub = bpub;
    }
    @Override
    public String toString() {
        return "Book [bname=" + bname + ", bnumber=" + bnumber + ", bpub=" + bpub + "]";
    }
}
package com.testSpring;

public class publisher {
    String name;
    String address;
    public void setName(String name) {
        this.name = name;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "publisher [name=" + name + ", address=" + address + "]";
    }
}
//测试(JUnit)
public class test {
    @Test
    public void Test01() {
        String resource = "com/testSpring/applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(resource);
        Book book = (Book)ac.getBean("book");
        System.out.println(book);
    }
}

控制台输出:

Book [bname=Java技术, bnumber=201410185732, bpub=publisher [name=清华大学出版社, address=xxxx]]

以上就是我们通过使用ref来注入引用类型

==============================================================================

下面我们接着看构造器注入

同理,先上主配置文件代码:

<!--构造器注入  -->
<bean id="c3" class="com.Spring.Demo.phone">
<constructor-arg index="0" value="高通骁龙"></constructor-arg>
<constructor-arg index="1" value="2G"></constructor-arg>
</bean>

这里的index是序号(记住是从0开始)。value为值。

当然我们这里的index也可以直接使用name指定,同时也可以省略,但是顺序上要和我们的类构造器要一致(不推荐,可读性差)

接下来是实体类代码:

package com.Spring.Demo;

public class phone {
    private String cpu;
    private String ram;
    public phone(String cpu,String ram){
        this.cpu=cpu;
        this.ram=ram;
    }
    public void show(){
        System.out.println("cpu:"+cpu);
        System.out.println("ram:"+ram);

    }
}

从中我们可以看出这个实体类多了一个构造器对新建实例进行初始化。

接下来进行测试:

package com.Spring.Demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestPhone {
    public static void main(String[] args){
        ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
        phone c3=(phone)ac.getBean("c3");
        c3.show();

    }

}

控制台输出:

cpu:高通骁龙
ram:2G

以上就是两种注入方法 。

版权声明:本文为博主原创文章,如需转载请表明出处。 https://blog.csdn.net/qq_39266910/article/details/77794393

原文地址:https://www.cnblogs.com/chengshun/p/9776172.html

时间: 2024-10-09 09:11:31

04 Spring框架 依赖注入(一)的相关文章

spring框架——依赖注入

依赖注入:DI 又称控制反转:IoC 项目名字spring_DI 一.implement包中定义了两个接口Food和Person 1.接口Food package org.interfaces; public interface Food { public String eat(); //food接口有被吃的方法待实现} 2.接口Person package org.interfaces; public interface Person { public void eatFood(); //人接

Spring.NET依赖注入框架学习--入门

Spring.NET依赖注入框架学习--入门 在学些Spring.net框架之前,有必要先脑补一点知识,比如什么是依赖注入?IOC又是什么?控制反转又是什么意思?它们与Spring.net又有什么关系 带着问题,我们一起来看看下面内容(适合刚刚学习或者对依赖注入还太懂的小神看---大神直接飘过) 对以上几个问题都滚瓜烂熟的直接跳下一篇 这里我找到一篇我认为比较好的博文   原地址:http://www.cnblogs.com/jhli/p/6019895.html ---感谢博主分享 1. Io

Spring.NET依赖注入框架学习--概述

Spring.NET依赖注入框架学习--Spring.NET简介 概述 Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入.面向方面编程(AOP).数据访问抽象及ASP.NET扩展等等.Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上. 企业级应用一般由多个物理层组成,每个物理层也经常划分为若干功能层.不同层次之间需要相互协作,例如,业务服务层一般需

Spring.NET依赖注入框架学习--简单对象注入

Spring.NET依赖注入框架学习--简单对象注入 在前面的俩篇中讲解了依赖注入的概念以及Spring.NET框架的核心模块介绍,今天就要看看怎么来使用Spring.NET实现一个简单的对象注入 常用文件 我们使用Spring.Net 框架经常要使用到的是以下文件: Common.Logging.dll  包含了Spring.Net日志方面的功能(必须) Spring.Core.dll       包含了Spring.Net 的核心库(必须) Spring.Data.dll       包含了

Spring.NET依赖注入框架学习--注入对象常见方法

Spring.NET依赖注入框架学习---实例化容器常用方法 本篇学习实例化Spring.NET容器的俩种方式 1.通过XmlObjectFactory创建一个Spring.NET容器 IResource input = new FileSystemResource ("objects.xml"); IObjectFactory factory = new XmlObjectFactory(input); 这样就可以通过factory的GetObject(“objectName”);获

Spring框架3:spring的依赖注入

本系列笔记均是对b站教程https://www.bilibili.com/video/av47952931 的学习笔记,非本人原创 spring的依赖注入(DI) 什么是依赖注入: 作者:Angry Bugs 链接:https://www.zhihu.com/question/32108444/answer/581948457 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 看了几个高赞答案,感觉说得还是太啰嗦了.依赖注入听起来好像很复杂,但是实际上炒鸡简单,一

关于Spring IOC (依赖注入)你需要知道的一切

[版权申明]未经博主同意,不允许转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/54561302 出自[zejian的博客] <Spring入门经典>这本书无论对于初学者或者有经验的工程师还是很值一看的,最近花了点时间回顾了Spring的内容,在此顺带记录一下,本篇主要与spring IOC相关 ,这篇博文适合初学者也适合spring有过开发经验的工程师,前者可用于全面了解Spring IOC的知识点,后者且

spring之依赖注入

spring的核心是依赖注入,此基础成为整个spring框架的基石. 所谓依赖注入,是指在程序运行过程中,如果需要调用另一个对象协助时,无须在代码中创建按被调用者,而是依赖外部注入. Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理. 依赖注入有两种方式: 构造器注入: 在构造对象的时候,依赖作为对象构造器的一个参数. 设值注入: 通过set方法进行注入. 以上两种方式即使不使用spring框架,我们也经常使用.使用spring后 这部分工作由spr

spring中依赖注入方式总结

Spring中依赖注入的四种方式 在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入  这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式). 使用属性的setter方法注入 首先要配置被注入的bean,在该bean对应的类中,应该有要注入的对象属性或者基本数据类型的属性.例如:为UserBiz类注入UserDAO,同时为UserBiz注入基本数据类型String,那么这时,就要为UserDAO对象和String类型设置se