如何理解Spring的解耦?言简意赅

首先,什么是耦合?

简单的说就是,假如类A因为需要功能F而调用类B,在通常的情况下类A需要引用类B,那么类A就依赖于类B了,但是当类B不存在的时候类A就无法使用了。

 

 

图例1

但若使用了IoC,类A调用的仅仅是实现了功能F的接口的某个类,这个类可能是类B,也可能是另一个类C,由spring的配置文件来决定。

这样,类A就不再依赖于类B了,耦合度降低,重用性提高了。

栗子:

Spring配置文件

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

<!--创建Service和Dao对象--> 
<bean id="userService" class="com.shangguigu.spring5.service.UserService"> 
<!--注入UserDao对象--> 
<property name="userDao" ref="userDaoImpl"></property> </bean> 
<bean id="userDaoImpl" class="com.shangguigu.spring5.dao.UserDaoImpl">
</bean> 

</beans>

UserDao

public interface UserDao {
    public void update();
}

UserImpl

public class UserDaoImpl implements UserDao {
    @Override
    public void update() {
        System.out.println("Userdao update....");
    }
}

UserService

public class UserService {
    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void add(){
        System.out.println("add ........");
        //原始方式
        //UserDao userDao = new UserDaoImpl();
        //userDao.update();
        userDao.update();
    }
}

测试类

public class TestBean {

    @Test
    public void testBean(){
        //1.spring加载配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("beans2.xml");

        //2.spring通过配置文件加载类
        UserService userService = context.getBean("userService", UserService.class);
        userService.add();
    }
    }

可以看出,UserService仅仅是调用了实现UserDao接口的实现类,如果将UserImpl改为DogDaoImpl只需要改变配置文件就行,而不用去更改UserService中的代码。

若按照UserService中的原始方式,UserDaoImpl更改,也会影响到UserService。

以上,即通过Spring实现了解耦。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值