Spring IOC简单的理论推导

原先MVC写法:

//UserDao接口
public interface UserDao {
   public void getUser();
}
///
//UserDao的实现类
public class UserDaoImpl implements UserDao {
   @Override
   public void getUser() {
       System.out.println("hello");
  }
}
//UserService的接口
public interface UserService {
   public void getUser();
}

//Service的实现类
public class UserServiceImpl implements UserService {
   private UserDao userDao = new UserDaoImpl();
   @Override
   public void getUser() {
       userDao.getUser();
  }
}
//测试运行
@Test
public void test(){
   UserService service = new UserServiceImpl();
   service.getUser();
}

此时需求来了,把Userdao的实现类增加一个:

public class UserDaoMySqlImpl implements UserDao {
   @Override
   public void getUser() {
       System.out.println("MySql!");
  }
}

使用UserDaoMySqlImpl的话 , 我们就需要去service实现类里面修改对应的实现

public class UserServiceImpl implements UserService {
   private UserDao userDao = new UserDaoMySqlImpl();//需要改这里

   @Override
   public void getUser() {
       userDao.getUser();
  }
}

问题出现:要使用别的UserDaoXxxImpl , 就需要去service实现类里面修改对应的实现。
解决方法:

public class UserServiceImpl implements UserService {
   private UserDao userDao;
   //不再写private UserDao userDao = new UserDaoMySqlImpl();
   //利用set实现
   public void setUserDao(UserDao userDao) {
       this.userDao = userDao;
  }
   @Override
   public void getUser() {
       userDao.getUser();
  }
}
@Test
public void test(){
   UserServiceImpl service = new UserServiceImpl();
   service.setUserDao( new UserDaoMySqlImpl() );//利用set实现
   service.getUser();
   /*
   service.setUserDao( new UserDaoXxxImpl() );//那又想别的实现
   service.getUser();*/
}

结论:以前所有东西都是由程序去进行控制创建,而现在是由我们自行控制创建对象,把主动权交给了调用者 。程序不用去管怎么创建,怎么实现了 。它只负责提供一个接口 。
控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IOC容器,其实现方法是依赖注入(Dependency Injection,DI)。

使用IOC :

<?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">
 
    <bean id="MysqlImpl" class="com.koma.dao.impl.UserDaoMySqlImpl"/>
    <bean id="XxxxImpl" class="com.koma.dao.impl.UserDaoXxxImpl"/>
    <bean id="ServiceImpl" class="com.koma.service.impl.UserServiceImpl">
        <property name="userDao" ref="XxxImpl"/>
    </bean>
</beans>
@Test
public void Test(){
    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    UserServiceImpl serviceImpl = (UserServiceImpl) context.getBean("ServiceImpl");
    serviceImpl.getUser();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Spring IOC (Inversion of Control) 是 Spring 框架中的一个核心功能,它通过依赖注入 (Dependency Injection, DI) 的方式在运行时动态地将对象的依赖关系注入到对象中。这样做的好处是可以使得对象之间的依赖关系更加灵活,且对象的创建和使用变得更加简单。 具体来说,Spring IOC 容器会管理所有的对象,并在运行时根据配置的信息将这些对象的依赖关系注入到对象中。这些对象被称为 Spring Beans,Spring IOC 容器负责创建、配置和管理这些 Spring Beans。 使用 Spring IOC 可以使程序更加灵活,因为对象之间的依赖关系可以在运行时动态地注入,而不是在编译时确定。这样可以使得程序更加灵活,可以更好地应对变化。 总的来说,Spring IOC 是一种设计模式,用于管理对象之间的依赖关系,使得对象之间的耦合度降低,使程序变得更加灵活。 ### 回答2: Spring IOCSpring 框架的核心特性之一,全称为控制反转(Inversion of Control)。 IOC 是一种设计模式,它将程序的控制权从应用程序自身转移到了框架上,由框架来控制应用程序的对象创建和管理。传统的开发方式是通过代码来直接创建对象并管理依赖关系,而 IOC 则将这部分控制权交给了框架。 在 Spring 中,IOC 容器扮演着重要的角色,它负责初始化对象、管理对象之间的依赖关系,并在应用程序运行期间进行对象的生命周期管理。通过配置文件或注解的方式,开发者只需描述需要的对象以及对象之间的依赖关系,而无需手动去实例化和管理对象。 使用 Spring IOC 的好处主要有三个方面: 1. 开发效率提高:由于 IOC 容器负责对象的创建和管理,开发者只需要关注对象的逻辑实现,无需关心对象的创建和销毁,大大提高了开发效率。 2. 代码解耦:IOC 的设计思想强调松耦合,对象之间的依赖关系通过配置文件或注解来描述,减少了代码间的硬编码,便于维护和扩展。 3. 更好的测试性:由于对象的创建和管理交给了容器,开发者可以使用模拟对象进行单元测试,而不需要依赖真实的对象,提高了测试的灵活性。 总而言之,Spring IOC 是一种基于控制反转的设计模式,将对象的创建和管理交给了框架,提高了开发效率、代码解耦和测试的灵活性。 ### 回答3: SpringIOC(Inversion of Control)是一种编程思想,也是Spring框架的核心特性之一。通过IOC,控制权由程序员转移到了Spring容器中,由容器负责对象的创建和管理。 在传统的开发模式中,对象的创建和管理都需要由程序员手动完成,而使用Spring IOC可以将这一任务交给Spring容器完成。程序员只需通过配置文件或注解来告诉Spring容器需要创建哪些对象,而具体的对象创建、依赖注入等工作都由容器自动完成。 Spring IOC的优势主要有以下几点: 1. 松耦合:通过IOC,对象之间的依赖关系由容器来管理,提高了代码的灵活性和可维护性。 2. 可测试性:IOC可以通过依赖注入的方式来注入对象,方便进行单元测试。 3. 配置灵活:使用配置文件或注解可以灵活地配置对象的创建和依赖关系,可以方便地进行修改和扩展。 4. 容器管理:Spring容器可以管理对象的生命周期、作用域等,使得对象的创建和销毁更加方便和可控。 Spring IOC的实现方式有两种:XML配置和注解方式。在XML配置中,需要手动配置对象的创建和依赖关系;而在注解方式中,可以通过注解来自动配置对象的创建和依赖关系。 总而言之,Spring IOC是一种通过将对象的创建和管理交给容器来实现松耦合、可测试、配置灵活和容器管理的编程思想,大大提高了代码的可维护性和可扩展性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Koma_zhe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值