Spring是一个依赖注入(控制反转)的框架,那么依赖注入(标控制反转)表现在那些地方了?

即:一个类中的属性(其他对象)不再需要手动new或者通过工厂方法进行创建,而是Spring容器在属性被使用的时候给予注入。

注入有2种方式:

1. 属性注入:通过无参构造函数+setter方法注入

2. 构造注入:通过有参的构造函数注入。

优缺点:

1. 属性注入直白易懂,缺点是对于属性可选的时候,很多个构造函数会显得类很臃肿。

2. 构造注入是一种高内聚的体现,特别是针对有些属性需要在对象在创建时候赋值,且后续不允许修改(不提供setter方法)。

下面看一个实例:

1.新建一个接口IPet

package entities;public interface IPet {public String getName();public void setName(String name);public void sleep();
}

2.新建两个类Dog和Cat

package entities;public class Cat implements IPet{//程序运行时,Cat的属性会被xml文件的属性注入代替private String name = "kitty";private int age = 2;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic void sleep() {System.out.println(name + "小猫睡了");        }
}

package entities;public class Dog implements IPet{public String name;public int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//构造方法重载public Dog(String name, int age) {this.name = name;this.age = age;}public void sleep() {System.out.println(name + "小狗睡了");}
}

3.配置beans.xml文件

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--指向Cat类,调用时直接用id的值--><bean id="pet1" class="entities.Cat"><!--属性注入--><property name="name" value="tom"></property><property name="age" value="3"></property></bean><bean id="pet2" class="entities.Dog"><!-- 构造方法注入 --><constructor-arg name="name" value="An"></constructor-arg><constructor-arg name="age" value="4"></constructor-arg></bean></beans>

4.读取配置文件并运行

package entities;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {//加载配置文件ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");    

     //读取xml文件中Cat和Dog对应的idIPet pet1 = (IPet)context.getBean("pet1");IPet pet2 = (IPet)context.getBean("pet2");pet1.sleep();pet2.sleep();}
}

运行结果:

<!--Cat类中的属性被xml文件的属性代替-->
tom小猫睡了<!--读取xml文件的构造方法注入,通过Dog类中的构造函数给属性赋值-->
an小狗睡了

转载于:https://www.cnblogs.com/jonsnow/p/6656399.html

Spring 依赖注入(一、注入方式)相关推荐

  1. 最全的 Spring 依赖注入方式,你都会了吗?

    欢迎关注方志朋的博客,回复"666"获面试宝典 前言 Spring 正如其名字,给开发者带来了春天,Spring 是为解决企业级应用开发的复杂性而设计的一款框架,其设计理念就是:简 ...

  2. Spring依赖注入的两种方式(根据实例详解)

    1,Set注入    2,构造注入 Set方法注入: 原理:通过类的setter方法完成依赖关系的设置 name属性的取值依setter方法名而定,要求这个类里面这个对应的属性必须有setter方法. ...

  3. spring的依赖注入 -------基于注解方式

    前言: 做了2年的软件,刚开始入行的时候,没有个目标基本上都是在摸索,技术看的我眼花缭乱,这个想学,那个也想学结果是对很多技术一知半解的,工作中才发现,我们要掌握的一门可以搞定快速开发搞定所有业务需求 ...

  4. Spring依赖注入的方式、类型、Bean的作用域、自动注入、在Spring配置文件中引入属性文件...

    1.Spring依赖注入的方式 通过set方法完成依赖注入 通过构造方法完成依赖注入 2.依赖注入的类型 基本数据类型和字符串 使用value属性 如果是指向另一个对象的引入 使用ref属性 User ...

  5. Spring 依赖注入的理解及三种注入方式

    Spring 依赖注入概念和三种注入方式(理解及应用) 什么是注入 要了解Spring的三种注入方式首先前提是得先了解一下什么是注入,相信很多人对这个概念都是模糊不清的,网上的解释是这样的: 依赖注入 ...

  6. spring依赖注入的4种方式

    Spring 依赖注入的4种方式 一.Set注入 必须要有setter方法 public class UserDao {public void test(){System.out.println(&q ...

  7. Spring的IOC创建对象的方式和代码基本解释为什么要有ioc的思维以及Ioc容器和spring依赖注入的解释

    首先我们要知道 Ioc是个啥? ​ IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合.更优良的程序.传统应用程序都是由我们在类内部主动创建依赖对象,从而导致 ...

  8. Spring依赖注入(注解方式)

    Spring依赖注入(注解方式) 在Spring中,尽管使用XML配置文件就可以实现Bean的装配工作,但如果应用中Bean的数量较多,会导致XML配置文件过于臃肿,从而给程序的维护与升级带来一定的困 ...

  9. 【spring系列】spring依赖注入实现方式(含案例)

    依赖注入是时下最流行的IoC实现方式, 依赖注入分为 接口注入(Interface Injection), Setter方法注入(Setter Injection) 构造器注入(Constructor ...

最新文章

  1. 并发异步处理队列 .NET 4.5+
  2. linux下 DNS配置过程『罗斌原创』
  3. 如何解决动态查询语句太长,大于数据库字符的最大长度
  4. Delphi 之 第八课 动态数组
  5. python文件下载速度 装饰器_python学习笔记之---装饰器
  6. iphone文件怎么上传到服务器,iPhone编程中文件上传到HTTP服务器
  7. 为QT的Webkit 编写插件
  8. 遗传算法实例(matlab编程实现)
  9. Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
  10. 基于python的百度离线地图下载器
  11. 无法加入域--隶属于域、工作组选项为灰色
  12. java 页眉页脚_Java 添加Excel页眉页脚
  13. MySQL里Wating for Slave workers to free pending events到底在等什么
  14. java中的消息队列
  15. fastapi服务部署
  16. 使用JS进行日期计算
  17. Android窗口Window的创建(悬浮窗)
  18. [vim] 滚动屏幕快捷键记忆
  19. 微信小程序的分销要怎么做?
  20. vim 一些常用命令

热门文章

  1. C#坏习惯:通过不好的例子学习如何制作好的代码——第5部分
  2. 3dmax java_Java3D读取3DMax模型并实现鼠标拖拽、旋转、滚轮缩放等功能
  3. springcloud服务熔断和服务降级的自我理解
  4. oracle有没有mysql if_Oracle中没有 if exists(...)
  5. 法的详细步骤_空气能热水工程安装步骤讲解
  6. sprintf函数打印数据不对_printf的归宿-数据打印到哪儿了
  7. uni 修改数据页面不重新渲染
  8. centos mysql 同步时间_centos:mysql主从同步配置(2018)
  9. char* 去除后面几个字符_【算法打卡】去除重复字母
  10. 配置服务器文件,服务器配置文件