简单实现依赖注入(无框架)

1、依赖注入概念   

       在Spring框架中,依赖注入(IOC)和面向切面编程(AOP)是它的两大核心。其中依赖注入是一个将行为从依赖中分离的技术,简单地说,它允许开发者定义一个方法函数依赖于外部其他各种交互,而不需要编码如何获得这些外部交互的实例。 这样就在各种组件之间解耦,从而获得干净的代码,相比依赖的硬编码, 一个组件只有在运行时才调用其所需要的其他组件,因此在代码运行时,通过特定的框架或容器,将其所需要的其他依赖组件进行注入,主动注入。

2、依赖注入实现

      依赖注入的实现是基于反射实现的,因此不使用Spring框架实现依赖注入也是基于反射实现的。

      首先定义一个利用反射获取类对象的方法,方法参数为类的全限定名称,代码如下:

复制代码
public static Object getInstance(String ClassName){
        Object result=null;   //定义为Object类,考虑到通用性
        try {
            result=Class.forName(ClassName).newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        } 
        return result;
}
复制代码

     然后建立接口接口的实现类,用于测试:

     接口:

public interface User {
     void sayHello();
}

     接口实现类:

public class UserImpl implements User {

    public void sayHello() {
        // TODO Auto-generated method stub
        System.out.println("Hello World!");
    }

}

    创建配置文件config.xml,在配置文件中设置bean名称:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
      <entry key="className">com.fsr.user.UserImpl</entry>
</properties>

   最后对依赖注入进行测试:

复制代码
    public static void main(String[] args) throws InvalidPropertiesFormatException, IOException {
        //载入配置信息
        InputStream inputStream=(InputStream)ClassLoader.getSystemResourceAsStream("config.xml");
        Properties properties=new Properties();
        properties.loadFromXML(inputStream);
        //读取beanName
        String ClassName=properties.getProperty("className");    
        //根据bean,利用反射获取对象
        User user = (User)getInstance
user.sayHello();
}
复制代码

  实际的运行效果如下:

     在程序中没有没有去new对象,而是交给getInstance()方法去new对象,代码会根据配置文件得到bean信息,然后去new配置文件中bean对象,将依赖注入到这里,如果要使用的实现类出现了变化,那么只需要修改xml配置文件中的信息就可以,大大减少了修改代码的成本。通过以上代码就简单的实现了依赖注入。

具体代码可以参见我的github: https://github.com/bywallance01/IOCTest/

    

    

 

     

posted @   沧浪少年  阅读(832)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示