Java基础—什么是依赖注入

依赖注入:Dependency Injection,简称”DI”

1. Java中的依赖注入

1.1. 什么是依赖注入

依赖注入是一个概念,对象从外部得到它所需要的其他对象。DI可以用很多语言来实现,依赖注入背后的一般概念称为控制反转。

如果一个java类使用了另外类的一个实例,我们就可以说一个Java类依赖其他类。例如,一个访问日志服务的类依赖于这个日志类。

理想的情况下,Java类应该尽可能的独立于其他的类。这增加了重复使用这些类的可能性,以及能够独立于其他的类对它们进行测试。

如果一个java类使用“new”的操作符创建了另外一个类的实例,它就不能独立于这个类使用或测试,这种情况称为“硬依赖”。

public class C {
    public void sayHello(){
        A a = new A();
        a.name = "wofwj";
    }
}

上面代码中,我们可以看到在名为C这个类的sayHello方法里面使用new操作符创建了一个A对象的实例a,那么就说明A是C的硬依赖。

一个框架类,通常被称为依赖容器,能够分析这个类的依赖。通过分析它能够创建类的实例,并通过java的反射注入这个对象到它定义的依赖中。

通过这种方式,Java类没有硬依赖。意味着它不依赖于具体某个类的实现,它允许你在隔离的情况下测试自己的类,例如通过使用模拟对象。

模拟对象(mocks)和真实的对象表现很相似。但是这些模拟对象不是编程所得,它们被配置为以某种预先特定的方式运行的。

1.2. 使用Java注解描述类的依赖

描述一个类的依赖有很多不同的方法。更通用的办法是使用java注解在类中直接描述这些依赖。

描述类依赖的java注解的标准是在Java的规范要求330(JSR——Java Specification Request),即JSR330中定义的。这个标准描述了@Inject、@Name注解。

public class MyInjectionTest{
    @Inject
    private Logger log;

    public void saveLogger(String errorInfo){
        log.error(errorInfo);
    }
}

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注