Spring

一、Spring介绍

全称:Spring Framework

1. SSH 与 SSM的区别

SSH:Struct2 + Spring + Hibernate
SSM:StringMVC + Spring + Mybatis

2. 下载地址

官网:https://spring.io/projects/spring-framework#overview
下载地址:http://repo.spring.io/release/org/springframework/spring/
GitHub: https://github.com/spring-projects/spring-framework

3. 导入依赖

<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.16</version>
</dependency>
<!--https://mvnrepository.com/artifact/org.spirngframewok/spring-webmvc-->
<dependency>
	<groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

<!--https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
	<groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

4. 优缺点

优点

  • Spring是一个免费开源的框架
  • Spring是一个轻量级的、非入侵式的框架
  • 控制反转(IOC)、面向切面编程(AOP)
  • 支持事务的处理,对框架进行整合
    总之一句话:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架

缺点

弊端:发展了太久之后,违背了原来的理念!配置十分繁琐,人称:“配置地狱”

5. 组成

Spring

  • Spring Boot

一个快速开发的脚手架
基于SpringBoot可以快速的开发单个微服务
约定大于配置

  • Spring Cloud

SpringCloud是基于springBoot实现的

二、IOC理论推导

  1. 之前,程序是主动创建对象,控制权在程序员手中
  2. 为使其更加完善,使用Set方法注入后,程序不再具有主动性,而是变成了被动的接受对象

原案例

dao层

1. 创建UserDao接口
package cn.edu.jxust.dao;

public interface UserDao {
    void getUser();
}
2. 创建实现类
1)UserDaoImpl
package cn.edu.jxust.dao.impl;

import cn.edu.jxust.dao.UserDao;

public class UserDaoImpl implements UserDao {
    @Override
    public void getUser() {
        System.out.println("获得用户数据");
    }
}
2)UserDaoMysqlImpl
package cn.edu.jxust.dao.impl;

import cn.edu.jxust.dao.UserDao;

public class UserDaoMysqlImpl implements UserDao {
    @Override
    public void getUser() {
        System.out.println("使用MySQL获取数据");
    }
}
3)UserDaoOracleImpl
package cn.edu.jxust.dao.impl;

import cn.edu.jxust.dao.UserDao;

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

service层

1. 创建UserService接口
package cn.edu.jxust.service;

public interface UserService {
    void getUser();
}
2. 创建UserSevicelmpl实现类
package cn.edu.jxust.service.impl;

import cn.edu.jxust.dao.UserDao;
import cn.edu.jxust.dao.impl.UserDaoImpl;
import cn.edu.jxust.service.UserService;

public class UserServiceImpl implements UserService {
    UserDao userDao = new UserDaoImpl();
    @Override
    public void getUser() {
        userDao.getUser();
    }
}

输出结果MyTest

import cn.edu.jxust.service.UserService;
import cn.edu.jxust.service.impl.UserServiceImpl;

public class MyTest {
    public static void main(String[] args) {
        //用户实际调用的是业务层,dao层他们不需要接触!
        UserService userService = new UserServiceImpl();
        userService.getUser();
    }
}

结果
遗留问题:需要改动源代码,若代码量增多,则增加很大的负担

完善案例

修改

1. 修改UserServiceImpl
import cn.edu.jxust.dao.UserDao;
import cn.edu.jxust.service.UserService;

public class UserServiceImpl implements UserService {
    private UserDao userDao;
    //利用set进行动态实现值的注入

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void getUser() {
        userDao.getUser();
    }
}
2. 输出
public class MyTest {
    public static void main(String[] args) {
        //用户实际调用的是业务层,dao层他们不需要接触!

        UserService userService = new UserServiceImpl();
        ((UserServiceImpl) userService).setUserDao(new UserDaoOrcleImpl());
        userService.getUser();
    }
}

总结

这种思想,从本质上解决了问题,我们程序员不再切管理对象的创建了。系统的耦合性大大降低~,可以更加专注注的在业务的实现上!这是IOC的原型!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值