Spring 学习笔记02

依赖注入

依赖注入的方式主要有两种,setter注入和构造器注入

1.setter注入

setter注入指的是通过成员变量的setter方法来注入被依赖的对象

首先定义两个接口:

public interface People {
    void drinkWater();
}
public interface Water {
    String makeDrink();
}

定义实现类

public class Tea implements Water{

    public String makeDrink() {

        return "开始泡茶";
    }

}
public class Chinese implements People{

    private Water  water;

    public void setWater(Water water) {
        this.water = water;
    }

    public void drinkWater() {
        System.out.println(water.makeDrink());
        System.out.println("中国人喜欢喝茶");
    }

}

配置文件中配置并注入bean

    <bean id="chinese" class="com.huan.example.Chinese">
        <property name="water" ref="Tea"></property>
    </bean>

    <bean id="Tea" class="com.huan.example.Tea">
    </bean>

测试:

public class TestPeople {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        Chinese chinese = ac.getBean("chinese", Chinese.class);
        chinese.drinkWater();
    }
}

结果:

Spring会自动检测<bean>元素中的<property>标签,在Spring调用默认的构造器创建Bean的实例之后会立刻调用对应的setter方法为Bean的

成员变量注入值。

2.构造注入

构造注入值的是在利用类的构造器构造实例时,对依赖的值进行注入,标签元素为<construct-arg../>

更改上面的Chinese实现类的代码以及配置文件

public class Chinese implements People{

    private Water  water;

    public Chinese(Water water){
        this.water = water;
    }

//    public void setWater(Water water) {
//        this.water = water;
//    }

    public void drinkWater() {
        System.out.println(water.makeDrink());
        System.out.println("中国人喜欢喝茶");
    }

}
    <bean id="chinese" class="com.huan.example.Chinese">
        <!-- <property name="water" ref="Tea"></property> -->
        <!-- 其他属性 index 代表构造器第几个参数   type 指定参数的类型-->
        <constructor-arg ref="Tea" />
    </bean>
    <bean id="Tea" class="com.huan.example.Tea">
    </bean>

使用测试类运行:

结果和set注入一致,构造注入和setter注入的主要区别在于:setter注入是先通过无参数的构造器创建一个Bean的实例,

然后调用对应的setter方法注入依赖关系,而构造器注入则直接调用有参数的构造器,当Bean实例创建完成后已经完成了

依赖关系的注入。

时间: 2024-12-19 16:16:22

Spring 学习笔记02的相关文章

Spring学习笔记——02 Bean的命名及实例化

一.Bean的命名 前一篇讲到IoC是一个管理Bean的容器,Bean多数情况下都是通过XML文件进行配置的,其中Bean的命名有以下几种方式,现在梳理一下. 1. 不指定id,只配置类名 <bean class="com.erving.HelloImpl"></bean> 若要调用该Bean,需要用以下语句: HelloApi helloApi = context.getBean(HelloApi.class); 2. 指定id,且id必须在IoC容器中唯一

Spring学习笔记(一)

Spring学习笔记(一) Spring核心思想: IOC:  Inversion Of Control (控制反转) / DI: Dependency Injection (依赖注入) AOP: Aspect Oriented Programming (面向切面编程) IOC 1. 简单的应用 Model package com.wangj.spring.model; public class User { private String username; private String pas

不错的Spring学习笔记(转)

Spring学习笔记(1)----简单的实例 ---------------------------------   首先需要准备Spring包,可从官方网站上下载.   下载解压后,必须的两个包是spring.jar和commons-logging.jar.此外为了便于测试加入了JUnit包.   在Myeclipse中创建Java项目.   编写一个接口类,为了简单,只加入了一个方法.   Java代码   1.package com.szy.spring.interfacebean;  

【OpenGL 学习笔记02】宽点画线

我们要知道,有三种绘图操作是最基本的:清除窗口,绘制几何图形,绘制光栅化对象. 光栅化对象后面再解释. 1.清除窗口 比如我们可以同时清除颜色缓冲区和深度缓冲区 glClearColor (0.0, 0.0, 0.0, 0.0);//指定颜色缓冲区清除为黑色 glClearDepth(1.0);//指定深度缓冲区的清除值为1.0 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//指定要清除的缓冲区并清除 2.绘制几何图形 先要设置绘制颜色,

SWIFT学习笔记02

1.//下面的这些浮点字面量都等于十进制的12.1875: let decimalDouble = 12.1875 let exponentDouble = 1.21875e1 let hexadecimalDouble = 0xC.3p0//==12+3*(1/16) 2.//类型别名,用typealias关键字来定义类型别名 typealias AudioSample = UInt16 var maxAmplitudeFound = AudioSample.min 3.//元组 let ht

Blender学习笔记 | 02 | 操作

Shift 点击不同图层 同时显示多图层物件 z 切换 Solid / Wireframe 视图模式 点选物件后M 移动到图层选项 Ctrl + 鼠标左键拖动 自由全选物件 B 方形区域圈选物件 Tab Object / Edit Mode 切换 T 开 / 关 侧栏 Ctrl + Tab 编辑状态下切换编辑对象 E Extrude Region 推挤区域.以发现为轴线. X 删除物件菜单 Blender学习笔记 | 02 | 操作,布布扣,bubuko.com

mongodb 学习笔记 02 -- CURD操作

mongodb 学习笔记 02 – CURD操作 CURD代表创建(Create).更新(Update).读取(Read)和删除(Delete)操作 创建库 直接 use 库名 然后创建collection 就可以创建库 创建collecion db.createCollection("collectionName") 隐式创建collection db.collectionName.insert({xxxxxx}) 删除collection db.collectionName.dro

软件测试之loadrunner学习笔记-02集合点

loadrunner学习笔记-02集合点 集合点函数可以帮助我们生成有效可控的并发操作.虽然在Controller中多用户负载的Vuser是一起开始运行脚本的,但是由于计算机的串行处理机制,脚本的运行随着时间的推移,并不能完全达到同步.这个时候需要手工的方式让用户在同一时间点上进行操作来测试系统并发处理的能力,而集合点函数就能实现这个功能. 可通过将集合点插入到 Vuser 脚本来指定会合位置.在 Vuser 执行脚本并遇到集合点时,脚本将暂停执行,Vuser 将等待 Controller 或控

《Spring学习笔记》:Spring、Hibernate、struts2的整合(以例子来慢慢讲解,篇幅较长)

<Spring学习笔记>:Spring.Hibernate.struts2的整合(以例子来慢慢讲解,篇幅较长) 最近在看马士兵老师的关于Spring方面的视频,讲解的挺好的,到了Spring.Hibernate.struts2整合这里,由于是以例子的形式来对Spring+Hibernate+struts2这3大框架进行整合,因此,自己还跟着写代码的过程中,发现还是遇到了很多问题,因此,就记录下. 特此说明:本篇博文完全参考于马士兵老师的<Spring视频教程>. 本篇博文均以如下这