简单模拟spring中ioc容器创建对象实例

  spring本质上是一个大工厂,根据xml文件能创建出程序所需的对象,有效的降低程序的耦合性。那为什么这样能降低程序的耦合性呢?我们最初想要创建对象,都是调用类的构造函数,new出我们需要的对象。但是这样做不好,一旦我们要实例化的对象发生改变,就需要把每一处创建实例的代码都修改,提高了代码维护的难度。于是工厂模式出现了,所需的对象都由一个工厂类产生,需要改变时,只需修改对应的工厂方法就行了。但是这样依然不够好,人们想能不能有一个配置文件,里面定义了我对所需对象的要求,工厂类对我的配置文件进行解析,来产生我所需的类,一旦我的需求发生改变,我只需要修改对应的配置文件就行了,不再需要去修改我的源码。这样不仅把程序的耦合性降低了,还把维护的难度也降低了。spring IOC容器就是做的这样一件事情。下面我来简单模拟一下IOC容器产生对象实例的过程(没有实现依赖注入)

dog基类与两个实现类

public class Dog {
  private Dog() {}
public void move() { System.out.println("一只狗在跑"); } public void call() { System.out.println("一只狗在叫"); } }
public class Corgi extends Dog{

    @Override
    public void move() {
        System.out.println("一只柯基在跑");
    }

    @Override
    public void call() {
        System.out.println("一只柯基在叫");
    }

}
public class GoldenRetriever extends Dog{

	@Override
	public void move() {
		System.out.println("一只金毛在跑");
	}

	@Override
	public void call() {
		System.out.println("一只金毛在叫");
	}
	
}

  配置文件beans.properties

dog = beanFactory.GoldenRetriever

工具类PropertiesUtil:负责加载和解析配置文件

public class PropertiesUtil {
    private static Properties props;
    static {
        InputStream inputStream = null;
        try {
            props = new Properties();
            inputStream = PropertiesUtil.class.getResourceAsStream("beans.properties");
            props.load(inputStream);
        } catch (IOException e) {
            new RuntimeException(e);
            System.out.println("找不到对应的配置文件");
        }finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    public static String getProperty(String id) {
        return props.getProperty(id);
    }
}

测试:

@Test
    public void testBeanFactory() throws Exception {
        Dog dog = BeanFactory.getBean("dog");
        dog.move();
        dog.call();
    }

结果:

一只金毛在跑
一只金毛在叫

当我们需要的dog对象需要改变时,我们只需要把配置文件改为:

dog = beanFactory.Corgi

结果:

一只柯基在跑
一只柯基在叫

 

转载于:https://www.cnblogs.com/qxkl/p/5271507.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值