2021-06-09

初学Spring IOC总结,按照狂神视频

1.什么是Spring

Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的框架(容器)

学习Spring主要学习 IOC 与 AOP

2.什么是IOC

官话:IOC 是一种设计思想,DI(依赖注入)是实现IOC的一种方法(谁听得懂)

在不使用IOC之前
1、UserDao接口

public interface UserDao {
   public void getUser();
}

2、再去写Dao的实现类

public class UserDaoImpl implements UserDao {
   @Override
   public void getUser() {
       System.out.println("获取用户数据");
  }
}

3、然后去写UserService的接口

public interface UserService {
   public void getUser();
}

4、最后写Service的实现类

public class UserServiceImpl implements UserService {
   private UserDao userDao = new UserDaoImpl();

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

5、测试一下

@Test
public void test(){
   UserService service = new UserServiceImpl();
   service.getUser();
}

这是我们原来的方式 , 开始大家也都是这么去写的对吧 . 那我们现在修改一下 。


把UserDao的实现类增加一个

public class UserDaoMySqlImpl implements UserDao {
   @Override
   public void getUser() {
       System.out.println("MySql获取用户数据");
  }
}

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

public class UserServiceImpl implements UserService {
   private UserDao userDao = new UserDaoMySqlImpl();

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

在假设, 我们再增加一个UserDao的实现类 .

public class UserDaoOracleImpl implements UserDao {
   @Override
   public void getUser() {
       System.out.println("Oracle获取用户数据");
  }
}

使用IOC之后
1、编写一个Hello实体类

public class Hello {
   private String name;

   public String getName() {
       return name;
  }
   public void setName(String name) {
       this.name = name;
  }

   public void show(){
       System.out.println("Hello,"+ name );
  }
}

2、编写我们的spring文件 , 这里我们命名为beans.xml(idea可以自动生成模板)

<?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">

    <!--
    使用spring创建对象,在spring中这些称为bean
    类型变量名 = new类型();
    HeLLo hello = new HeLLo();
    id =变量名
    class = new的对象;
    property相当于给对象中的属性设置一个值!
    -->
    <bean id="hello" class="com.kuang.pojo.Hello">
        <!--
        ref:引用Spring容器中创建好的对象
        value:具体的值,基本数据类型!
        -->
        <property name="str" value="Spring"/>
    </bean>

</beans>

3、我们可以去进行测试了 .

import com.kuang.pojo.Hello;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    public static void main(String[] args) {
        /**
         * context:获取spring上下文对象
         * 解析beans.xml文件 , 生成管理相应的Bean对象
         * 我们的对象现在都在Spring中的管理J,我们要使用. 直接去里面取出来就可以!
         */
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        Hello hello = (Hello) context.getBean("hello");
        System.out.println(hello.toString());
    }
}

总结:不难看出,对比两种方式,在使用IOC的时候,对象的创建不再是在java类中创建

  • Hello 对象是谁创建的 ? hello 对象是由Spring创建的
  • Hello 对象的属性是怎么设置的 ? hello 对象的属性是由Spring容器设置的

这个过程就叫控制反转 :

控制反转是一种通过描述(XML或注解)并通过第三方去获取特定对象的方式

在Spring中实现控制反转的是IOC容器,其实现方法是依赖注入(Dependency Injection,DI

  • 控制 : 谁来控制对象的创建 , 传统应用程序的对象是由程序本身控制创建的 , 使用Spring后 , 对象是由Spring来创建的
  • 反转 : 程序本身不创建对象 , 而变成被动的接收对象 .

依赖注入(DI) : 就是利用set方法来进行注入的.

IOC是一种编程思想,由主动的编程变成被动的接收

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值