Spring学习IOC


前言

之前都是需要用到spring的时候,去查询怎么使用,没有去学习其中的原理,所以需要花时间讲之前没学过的知识,重新学习一边。

一、Spring是什么?

Spring就是一个轻量级开源免费,非入侵的控制反转(IOC)和面向切面变成(AOP)框架。

二、控制反转(IOC)是什么?

控制反转IOC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IOC的一种方法。没有IOC的程序中,我们使用面向对象变成,对象的创建与对象间的依赖关系完全写死在程序中,由程序自己控制,而控制反转则是将对象的创建转移给调用方。简单来说就是想要使用哪个对象将由使用者自己创建。下面用图来描述。
在这里插入图片描述
IOC是Spring框架的核心内容,通常使用XML配置与注解来实现。

代码举例

项目结构如下
在这里插入图片描述

pox.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>springIoc</groupId>
    <artifactId>zjj</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.9</version>
        </dependency>
    </dependencies>
</project>

UserDao

package dao;

public interface UserDao {
    public void getUser();
}

UserMysqlDaoImpl

package dao;

public class UserMysqlDaoImpl implements UserDao{
    public void getUser() {
        System.out.println("mysql的用户信息");
    }
}

UserOracleDaoImpl

package dao;

public class UserOracleDaoImpl implements UserDao{
    public void getUser() {
        System.out.println("oracle的用户信息");
    }
}

UserSqlserverDaoImpl

package dao;

public class UserSqlserverDaoImpl implements UserDao{
    public void getUser() {
        System.out.println("sqlserver的用户信息");
    }
}

UserService

package service;

public interface UserService {
    public void  getUser();
}

UserServiceImpl

package service;

import dao.UserDao;
import dao.UserMysqlDaoImpl;
import dao.UserOracleDaoImpl;
import dao.UserSqlserverDaoImpl;

public class UserServiceImpl implements UserService{
    public UserDao userDao;

    //传统模式 每增加一个都需要重新开发一个方法
    public void getMysqlUser(){
        new UserMysqlDaoImpl().getUser();
    }
    public void getOracleUser(){
        new UserOracleDaoImpl().getUser();
    }
    public void getSqlserverUser(){
        new UserSqlserverDaoImpl().getUser();
    }

    //IOC模式
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }

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

MyTest

import dao.UserDao;
import dao.UserMysqlDaoImpl;
import dao.UserOracleDaoImpl;
import dao.UserSqlserverDaoImpl;
import service.UserServiceImpl;

public class myTest {
    public static void main(String[] args) {
        UserServiceImpl userService = new UserServiceImpl();
        //传统的代码
        userService.getMysqlUser();
        userService.getOracleUser();
        userService.getSqlserverUser();
        //IOC形式的代码
        userService.setUserDao(new UserMysqlDaoImpl());
        userService.getUser();
        userService.setUserDao(new UserOracleDaoImpl());
        userService.getUser();
        userService.setUserDao(new UserSqlserverDaoImpl());
        userService.getUser();
    }
}

结果:
在这里插入图片描述

总结

这次简单说一下Spring中的核心概念IOC,下次再讲述AOP。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值