最近学了Spring 但一直没整理,趁着空档整理一下吧!

在正式开始Spring的学习前,我们先来认识几个概念

什么是Spring

Spring是一个家族体系(spring的全家桶),可以完成Java开发中几乎所有问题!!
为什么说Spring可以解决Java开发中的所有问题。

1. 基于POJO轻量级和最小侵入式开发 通过依赖注入(DI)和面向接口实现松耦合。
2. 基于切面和惯例进行声明式编程 通过切面和模板减少样板式代码。

Spring家族有哪些成员呢?
Spring家族常见的项目如下:
1)Spring Framework (spring框架 IOC AOP 事务管理,SpringMVC等)
2)Spring Security(权限校验) 粗粒力度的权限校验, 细粒力度的权限校验
3)Spring Data( 一统持久层天下 mysql,oracle,mongoDB,solr等 )
4)Spring Boot(简化Spring开发)
5)Spring Cloud(分布式开发)

当然Spring家族成员不止这些,想了解更多关于Spring的家族成员 点击这里

在没有Spring前我们是怎么样进行开发的
  1. 首先我们需要一个pojo(实体类对象)
  2. 提供对应的接口 (dao)
  3. 提供接口的实现类
  4. 提供对应的service
  5. 提供对应的controller
这种开发模式好吗?

在这种情况下service层依赖于dao层,但如果我dao层下改变了那么service层下也要随之改变
同上 controller层改变service层也要随着改变。这造成了代码之间的耦合,修改起来不方便,
有没有解决的方法呢?

这时Spring的第一个家族成员Spring Framework 就出马了

程序解耦-控制反转(IOC)

Spring (Framework)框架拥有7个核心模块,都是为JavaEE开发提供基础功能。

  1. Spring Core (IOC容器):创建对象,给对象属性赋值
  2. Spring AOP(面向切面编程): 事务管理,自定义AOP编程
  3. SpringMVC:Spring提供MVC表现层模块
  4. Spring ORM :Spring整合ORM框架(Hibernate/JPA)
  5. Spring JDBC : 提供JdbcTemplate的,对Jdbc简单封装
  6. Spring Web: Spring整合Web(Servlet,Filter)
  7. Spring Context: 国际化,事件驱动编程

为了解决上面那个问题
Spring的核心思想之一:Inversion of Control , SpringIOC 诞生了
在以前创建对象都是由我们手动去new出来,现在把这个权利交给了spring的工厂

1 把创建对象的权力,由自己创建(new)改为工厂(IOC容器)来创建
2. 最终解决的是创建对象的耦合问题。

多说无益,先敲代码,再来解释
首先我们要使用Spring,必须导入Spring的依赖

<dependencies> <!--spring的核心包--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><!-- Junit测试--><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency></dependencies>

编写实体类

编写applicationContext.xml 配置文件

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--配置创建user对象--><bean id="user" class="com.shelock.entity.User"/>

编写测试类

public class AppTest {@Testpublic void test01(){//1.得到spring 的容器 , 读取对应xml文件创建spring的容器。ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");//2. 通过容器获取到对应对象User user = (User) applicationContext.getBean("user");//需为实体类的名称//3. 输出对象System.out.println(user);}
}

这样我们的第一个SpringIOC入门案例就到此成功了

此外Spring还提供了注解的方式创建对象

  1. @Component 创建对象加入容器。一般用于工具类的注解。
  2. @Controller: 创建对象加入容器。一般用于表现层的注解。
  3. @Service: 创建对象加入容器。一般用于业务层的注解。
  4. @Repository:创建对象加入容器。 一般用于持久层的注解

但要用到注解属性需要在配置文件中开启注解支持

SpringIOC(控制反转)

控制反转的思想最核心的地方在于,我们把创建对象的权力交给了Spring,由不使用资源的第三方Spring管理,这可以带来很多好处。第一,资源的集中管理。第二,降低了使用资源双方的依赖程度,也就是我们说的耦合度。
也就是说创建对象会造成双方之间的依赖程度,那我不去创建对象,由Spring创建对象,Spring没有和我的业务层产生关系,只是作为一个容器,创建对象往Spring容器中放,使用对象往Spring中拿,通过Spring减少了对象之间的耦合。

SpringIOC容器(Bean标签属性)

属性 说明
id 对象的引用名称 ;唯一值
name 对象的引用名称;name可以定义多个;相当于别名
class 类的全限名
scope bean的设计模式(单例; 多例)
init-method 前置方法; 在构造方法执行后执行
destroy 销毁方法 在销毁Spring容器前执行
lazy-init 延迟加载;只在单例下有效

现在我们的对象创建都交给了SpringIOC,那我们要给对象赋值该怎么做呢?

SpringIOC的另一个属性 DI(依赖注入)

什么是依赖注入(denpendices injection)?
就是给对象的属性赋值

spring给对象赋予属性值(依赖注入)的方式(3种)

  • 利用带参的构造器给对象属性赋值

  • 利用setter方法给对象的属性赋值

  • 利用p空间给对象的属性赋值(底层还是依赖Setter方法)。

带参的构造器(要在实体类中有一个带参的构造器)

applicationContext

测试类

setter方法给对象的属性赋值

配置文件

p空间给对象的属性赋值(底层还是依赖Setter方法)

同样 依赖注入也同样支持注解

@Autowired
注入数据,从IOC容器获取另一个对象来注入。
使用前提: spring容器必须存在相同类型的值。
可以修饰成员变量,也可以修饰方法

@Qualifier
如果想让@Autowired根据指定的对象(别名)名称实现依赖注入,要配置@Qualifier注解

@Value
直接给简单类型的字段赋值
获取配置文件值

推荐阅读

关于依赖注入

最后

关于SpringIOC的控制反转和依赖注入就到处告一段落了
有空在更!!!
如果文章有错的地方欢迎指正,大家互相交流,互相探讨。
个人博客: juhaozero的博客

Spring入门——控制反转是什么鬼相关推荐

  1. java-12:spring MVC - 控制反转IOC,依赖注入DI

    学习spring框架之前,先理解几个概念: 1.第一部分:依赖倒置原则 2.第二部分:控制反转,控制反转容器(实例) 3.第三部分:控制反转,控制反转容器(全面理解,面试题) 综合性理解:控制反转(I ...

  2. Spring的控制反转(IOC)和依赖注入(DI)具体解释

    Spring的控制反转(IOC)和依赖注入(DI)具体解释 首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应 ...

  3. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 在这里插入图片描述 案例 如 ...

  4. Spring 的控制反转/依赖注入

    第一章 Spring 的控制反转/依赖注入 回顾 增删改查. 课前测: 本章内容 spring:春天 IOC:将创建对象的权力交给 spring 核心容器去控制.工厂模式 BeanFactory: 懒 ...

  5. Spring IOC(控制反转)思想笔记

    Spring IOC(控制反转)思想笔记 IOC控制反转基本理念就是将程序控制权从程序员手中交给用户自定义,从而避免了因为用户一个小需求的变化使得程序员需要改动大量代码. 案例 如果按照之前javaw ...

  6. SSM框架—Spring基础—控制反转和依赖注入(概念)

    控制反转: 控制反转(IoC)是面向对象编程的一个设计原则,用于降低代码耦合度 在传统面向对象编程中,获取对象的方式是用关键字"new"主动创建一个对象,也就是说,应用程序掌握着对 ...

  7. Spring的控制反转与依赖注入

    学习过Spring的都知道Spring有三大核心的概念,分别是控制反转(IOC).依赖注入(DI)和面向切面编程(AOP).今天就来聊聊我对控制反转和依赖注入的了解,至于面向切面编程放到后面讲解. 一 ...

  8. spring ioc控制反转

    一. 什么是spring,它能够做什么? Spring是一个开源框架,它由Rod Johnson创建.它是为了解决企业应用开发的复杂性而创建的. Spring使用基本的JavaBean来完成以前只可能 ...

  9. Spring IOC(控制反转)详解及示例

    控制反转--Spring通过一种称作控制反转(IOC)的技术促进了低耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JN ...

最新文章

  1. java 任意多个整数相加_一个整数分为若干个连续整数之和(使用java实现)
  2. leetcode算法第7题
  3. 配置内网邮件和外网邮件互发
  4. 用这样的方法,我解决了leetcode的大部分的这种题型!
  5. 关于使用Nginx服务器发布静态网页或者代理
  6. Debian Linux 的 vim 如何使用系统剪贴板
  7. C++设计模式-享元模式
  8. 香港mtmit真皮休闲商务双用时尚浮点手拿包1018 烟灰色-大号 均码【图片 价格 品牌 报价】-京东商城...
  9. android 测量字体宽高,Android中测量Text的宽度和高度
  10. Java进阶:Mybatis学习
  11. 自用软件系列之:迅雷X ,无广告,纯净版
  12. 泛函分析笔记(七) 连续线性算子和连续多重线性映射
  13. 购物是女人的天堂,男人的地狱,不了解清楚万一以后被坑了,男人躲哪里后悔去,做这样一个web购物网站,买了货死活回不来,让双十一的女人们过过瘾
  14. Blazor预研与实战
  15. kubeadm部署k8s多master节点的高可用集群
  16. 人工智能作业之神经网络股票(预测)系统
  17. 英文版VS2010制作中文环境安装包
  18. Apache中间件漏洞深析
  19. 177本名著浓缩成了177句话!经典收藏!
  20. 【人工智能项目】- 深度学习实现猫狗大战

热门文章

  1. 商城笔记11——GD库
  2. ZZULIOJ:1123:最佳校友
  3. 华为“废太子”李一男 出狱后能否东山再起?
  4. 鸿蒙os系统支持oppo手机吗,华为霸气官宣!毫无保留的开放鸿蒙OS系统:所有国产手机都能使用...
  5. 武汉二手房市场现在怎样了?涨了还是跌了?分析下武汉二手房数据
  6. 动手深度学习v2 多输入多输出通道课后习题
  7. Pycharm下运行调试Python项目时,当调试既需要给调试的程序传入命令行参数又需要程序在设置的断点处停下里查看变量时的解决方法
  8. 廖晓峰重庆大学计算机学院院长,重庆大学廖晓峰教授当选IEEE Fellow
  9. Android实战——jsoup实现网络爬虫,糗事百科项目的起步
  10. STM32—4线SPI驱动SSD1306 OLED