美文网首页
依赖注入与控制反转——Spring

依赖注入与控制反转——Spring

作者: Wilson_wad | 来源:发表于2019-07-26 14:02 被阅读0次

总结

代码这东西,思想最重要,从实践开始,基于实践思考。最终作用于实践

理论部分

依赖注入:DI(Dependency Injection)。分为两部分解释

  • 依赖:A类如果需要使用B类,那么A依赖于B
  • 注入:类似于医院的注射一样

依赖注入的意思简单就是,将B的引用传入到A。(A可以自己new一个B,但是注入就是外部构造一个B再传入A

控制反转:IOC(Inversion of Control)。将资源控制权交给第三方管理,通常我们是A需要B,A是需求方,B是提供方,直接交易。但是IOC容器就是一个中介,代为管理和分配。

需求方A——卖家

提供方B——卖家

IOC——中介

控制反转依赖于(基于)DI,没有DI就没有IOC

以上都是思想,最终实现千姿百态,我选择的是目前极具代表性的Spring框架

对于属性的赋值,我把他们分为手动控制控制反转

手动控制

最常见的方法:直接new

private A a=new A();

耦合度极高,静态。修改困难,需要重新编译打包

简单工厂模式

//使用
private BookDao bookDao = DaoFactory.getInstance().createDao("zhongfucheng.dao.impl.BookDaoImpl", BookDao.class);
//工厂类
public class DaoFactory {
    private static final DaoFactory factory = new DaoFactory();
    private DaoFactory(){}
    public static DaoFactory getInstance(){
        return factory;
    }
    public <T> T createDao(String className,Class<T> clazz){
        try{
            T t = (T) Class.forName(className).newInstance();
            return t;
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

耦合度降低,通过传入字符串信息进行动态加载,但依然是静态

因此将其变种,字符串信息从配置文件读取,实现动态、运行时修改。

自动注入

Spring简单入门

主要讲讲基本的概念

两种IOC容器

  • BeanFactory
  • XmlBeanFactory:基于BeanFactory,代表角色-ApplicationContext。看名字便知道,这个类就是从xml中加载配置。(就像我上面说的工厂类及其变种)

XmlBeanFactory两个配置文件加载方式

  • FileSystemXmlApplicationContext
  • ClassXmlAplicationContext

~注:classpath既存放.class文件的地方

注入方式

  • 通过构造函数
  • 通过set方法给属性注入值
  • p名称空间
  • 自动装配(了解)
  • 注解

ApplicationContext简介

如何加载ApplicationContext.xml

public class App {
    public static void main(String[] args) {
        // 创建容器对象
        //ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        ApplicationContext ac=new FileSystemXmlApplicationContext("DemoSpring/applicationContext.xml");
        //得到service对象
        UserService userService = (UserService) ac.getBean("userService");
        userService.save();
    }
}

他相当于一个容器,因此根节点是<beans>二级节点是<bean>,豆荚和豆子的关系。

注册一个bean

<!--创建userDao对象-->
<!--id表示标识,class标识需要加载的类-->
<bean id="userDao" class="UserDao"/>

如何注入

构造函数注入

<!--创建userService对象-->
<bean id="userService" class="UserService">
    <!--要在userService中用userDao,必须先创建userDao-->
    <!--构造器配置,index表示第几个参数,name表示参数名,ref表示注入对象,在bean里面选-->
    <constructor-arg index="0" name="userDao" ref="userDao"/>
</bean>

setter()注入

<bean id="userService" class="UserService" >
    <!--要在userService中用userDao,必须先创建userDao-->
    <!--构造器配置,index表示第几个参数,name表示参数名,ref表示注入对象,在bean里面选-->
    <property name="userDao" ref="userDao"/>
</bean>
  • 引用类型使用ref属性
  • 基本类型使用value属性

p命名空间

<bean id="userService" class="UserService" p:userDao-ref="userDao"/>

ide会自动在<beans>添加

<beans xmlns:p="http://www.springframework.org/schema/p" />

自动装配

通过setter()进行装配,而不是构造器

两种形式

  • byName
  • byType
<bean id="userService" class="UserService" autowire="MODE">

全局自动化

<beans default-autowire="MODE"/>

注解

用注解记得先扫描,如果没有扫描,那么所有注解都是失效的

<!--扫描-->
<beans><context:component-scan base-package="com"/></beans>

@AutoWired

  • 可以在构造器上修饰
  • 也可以在setter方法上修饰
  • 来自java的@Inject的和@AutoWired有相同的功能

实践部分

移步:GitHub

Reference

Spring【依赖注入】就是这么简单

相关文章

  • spring之控制反转和依赖注入

    Spring学习(三)IOC控制反转与DI依赖注入

  • spring

    spring4介绍 spring配置详解 IOC(控制反转) 与 DI(依赖注入)重点 依赖注入各种类型const...

  • Spring 原理概述

    Spring 原理概述 Spring 两大核心:控制反转(IoC)/ 依赖注入(DI)面向切面(AOP) 控制反转...

  • 依赖注入

    依赖注入(DI) Spring 最认同的技术是控制反转的依赖注入(DI)模式。控制反转(IoC)是一个通用的概念,...

  • spring面试问题总结(1-20)

    一. 介绍一下Spring IOC (控制反转,依赖注入)? Spring支持三种依赖注入方式,分别是属性(Set...

  • learn go with tests 学习笔记(四)依赖注入

    知识点 依赖注入举例 首先我们应该明白什么是控制反转 -> 控制反转(IoC)与依赖注入(DI)控制反转的目的很简...

  • spring之IOC

    Spring之IOC(DI) 控制反转 Inversion of Control依赖注入 Dependency I...

  • Spring入门01--基本知识

    一, Spring框架的核心机制:依赖注入DI和控制反转IOC 理解控制反转IOC(Inversion Of Co...

  • 6.Spring IoC练习

    1. 依赖注入和控制反转 依赖注入和控制反转IoC是什么Ioc—InversionofControl,即“控制反转...

  • spring IOC

    IOC: 控制反转 Spring Core最核心的部分需要先了解依赖注入

网友评论

      本文标题:依赖注入与控制反转——Spring

      本文链接:https://www.haomeiwen.com/subject/iogrrctx.html