SpringIOC哪解耦合了?

        初学Spring时,对于SpringIOC的作用大为感叹,但是一直不清楚SpringIOC为什么可以起到解耦合的作用?我直接new出来跟它用@Autowired注解与Resource注解DI注入感觉似乎也差不太多

        在看网上资料说假如我们修改一处代码,往往要修改很多出相关联的代码。当我要注入的对象发生改变,例如之前我需要的是cat,而现在我需要的是dog,这样我new的代码需要改变,可是我用@Autowired注解与Resource注解也要发生改变,那怎么就起到了解耦合的作用了呢?为此也困惑了我很久,也可能是我理解不够。

假设有一个订单类Order和一个工厂类OrderFactory,工厂类使用new创建订单类的实例:

public class Order {
    private String orderId;
    private int amount;

    public Order(String orderId, int amount) {
        this.orderId = orderId;
        this.amount = amount;
    }
}

public class OrderFactory {
    public Order createOrder(String orderId, int amount) {
        return new Order(orderId, amount);
    }
}

现在,又有一个前端界面类A依赖于OrderFactory创建订单。那么,在本例中,如果Order类的构造函数的参数发生变化,比如增加一个address属性:

public class Order {
    private String orderId;
    private int amount;
    private String address;

    public Order(String orderId, int amount, String address) {
        this.orderId = orderId;
        this.amount = amount;
        this.address = address;
    }
}

那么OrderFactory和A类的方法中都需要相应的修改,否则编译阶段会报错。

public class OrderFactory {
    public Order createOrder(String orderId, int amount, String address) {
        return new Order(orderId, amount, address);
    }
}

public class A {
    private OrderFactory orderFactory;

    public A(OrderFactory orderFactory) {
        this.orderFactory = orderFactory;
    }

    public void createOrder(String orderId, int amount, String address) {
        Order order = orderFactory.createOrder(orderId, amount, address);
        // do something
    }
}

显然,这种手动创建对象的方式将类与类之间紧密耦合,且代码难以维护。而使用Spring IOC容器进行依赖注入,则不会出现上述问题

我们可以通过IOC容器自动实例化OrderFactory并将其注入到A类中。这样,我们就不需要手动实例化OrderFactory,也不需要把它的实例传递给A类的构造函数或方法

总之,通过使用Spring IOC容器进行依赖注入,我们可以实现高度解耦、低耦合度的依赖管理,同时大大提高了程序的可维护性、扩展性和灵活性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值