栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring IOC简单的理论推导

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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();
   
}

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

使用IOC :



 
    
    
    
        
    

@Test
public void Test(){
    ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
    UserServiceImpl serviceImpl = (UserServiceImpl) context.getBean("ServiceImpl");
    serviceImpl.getUser();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/490182.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号