初识Spring---了解控制反转(IoC)

一、Spring简介

        Spring 是 Java EE 编程领域的一款轻量级的开源框架,Spring 框架是一个分层的、面向切面的 Java 应用程序的一站式轻量级解决方案,它是 Spring 技术栈的核心和基础,是为了解决企业级应用开发的复杂性而创建的。

对于Spring的特点及体系结构大家可以去官方文档去了解,表达的很详细。

Spring 有两个核心部分: IoC 和 AOP。

二、控制反转

IoC的中文意思是控制反转,它不是一门技术,而是一种设计思想,设计出代码耦合性更低的程序。

在传统的 Java 应用中,一个类想要调用另一个类中的属性或方法,通常会先在其代码中通过 new Object() 的方式将后者的对象创建出来,然后才能实现属性或方法的调用。为了方便理解和描述,我们可以将前者称为“调用者”,将后者称为“被调用者”。也就是说,调用者掌握着被调用者对象创建的控制权。

举例:例如在Web开发中,有Dao层,DaoImpl实现类,Service业务层,ServiceImpl实现类。

//UserDao层
public interface UserDao {

    /**
     * 查询用户
     */
    void getUser();

}


//UserDao的实现类Impl_1
public class UserDaoImpl_1 implements UserDao {
    public void getUser() {
        System.out.println("查询用户来了1111111111");
    }
}

//UserDao的实现类Impl_2
public class UserDaoImpl_2 implements UserDao {
    public void getUser() {
        System.out.println("查询用户来了2222222222");
    }
}

//Service业务层
public interface UserService {
    void getUser();
}

//ServiceImpl实现类
public class UserServiceImpl implements UserService {

    //创建UserDaoImpl_1对象,然后去调用
     private UserDao userDao =new UserDaoImpl_1();

    //重写业务层方法,调用方法。
     public void getUser() {
        userDao.getUser();
    }
}

//创建测试类
public class MyTest {

    public static void main(String[] args) {
       UserService userService = new UserServiceImpl();
       userService.getUser(); //控制台打印:查询用户来了1111111111
    }
}

在上述代码中,如果想实现控制台打印"查询用户来了2222222222",需要在业务层的实现类修改代码,创建UserDaoImpl_2对象,这样代码的耦合性很高,如果Dao层有10个接口,那么用户想现实不同的查询,都需要我们程序员来修改代码,这样创建对象的权利都在我们程序员手中。

那么来,修改业务层实现类,通过设置Set属性注入,这里可以先这么理解看代码,后面会学习到实现IOC的方式,我们先来看看效果。

原来是程序员主动创建对象,现在变成了被动的接收对象。

//修改业务层实现类代码
public class UserServiceImpl implements UserService {

//    private UserDao userDao =new UserDaoImpl_1();
    
    private UserDao userDao;

    /**
     * 通过set动态依赖注入
     * @param userDao
     */
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

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


public class MyTest {

    public static void main(String[] args) {
        /**
         * 控制反转简单来说就是获取依赖对象的方式改变了
         * 业务层调用dao层,每次调用不同的dao实现类,在业务层里每次都需要创建新的dao实现类对象
         * 主要dao与业务层耦合性高,每次需要修改代码,创建对象是由程序员控制
         * 通过ioc思想,使用依赖注入,创建对象交给第三方
         * 这里的MyTest测试类大家可以理解成用户 每次用户想用哪个调用哪个
         */

          UserService userService = new UserServiceImpl();
            //如果想调用UserDaoImpl_2,那么只需修改里面括号的对象  
         ((UserServiceImpl) userService).setUserDao(new UserDaoImpl_1());

         userService.getUser();
    }        
}

以上是本人第一天学习Spring入门记录,哪里理解的不对欢迎大家评论。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值