一、Spring概述

1. Spring是什么?

Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。就是让对象和对象(模块和模块)之间关系不是使用代码关联,而是通过配置来说明。即在 Spring 中说明对象(模块)的关系

Spring 根据代码的功能特点,使用 IOC 降低业务对象之间耦合度。IOC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring容器统一管理,自动“注入”,注入即赋值。 而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务“混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”

spring全家桶:

spring , springmvc ,spring boot , spring cloud

spring: 出现是在2002左右,解决企业开发的难度。减轻对项目模块之间的管理,类和类之间的管理, 帮助开发人员创建对象,管理对象之间的关系。

spring核心技术 ioc(控制反转) , aop(面向切面编程) 。能实现模块之间,类之间的解耦合。

2. IOC控制反转

控制反转(IOC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理,控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。

通过容器实现对象的创建,属性赋值,依赖的管理。

IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式是依赖注入

依赖:classA 类中含有 classB 的实例,在 classA 中调用 classB 的方法完成功能,即 classA对 classB 有依赖

IOC的实现:

依赖注入:DI(Dependency Injection),程序代码不做定位查询,这些工作由容器自行完成

依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序

Spring 框架使用依赖注入(DI )实现 IOC

Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称为 Bean。Spring 容器管理着容器中 Bean 之间的依赖关系,Spring 使用“依赖注入”的方式来管理 Bean 之间的依赖关系。使用 IOC 实现对象之间的解耦和

二、Spring的第一个程序

1. 创建Maven项目

下面的直接下一步就可以了,具体的看之前写的关于Maven的操作

创建成功的如下:

2. 加入maven依赖pom.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>com.md</groupId>
<artifactId>01-hello-spring</artifactId>
<version>1.0-SNAPSHOT</version> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties> <dependencies>
<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency> <!--spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency> </dependencies> <build> </build>
</project>

3. 定义接口和实体类

package com.md.service;

/**
* @author MD
* @create 2020-08-07 17:32
*/
public interface SomeService {
void doSome();
} //-----------------------------------------
package com.md.service.impl;
import com.md.service.SomeService;
/**
* @author MD
* @create 2020-08-07 17:33
*/
public class SomeServiceImpl implements SomeService { public SomeServiceImpl() {
System.out.println("我是SomeServiceImpl的无参构造方法");
} @Override
public void doSome() {
System.out.println("执行了SomeServiceImpl的doSome()方法");
}
}

4. 创建Spring的配置文件

在src/main/resources目录下创建xml文件,具体如下:文件名可以随意,但 Spring 建议的名称为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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--
spring的配置文件
1. beans:根标签,spring把java对象成为bean
2. spring-beans.xsd是约束文件,和mybatis的dtd类
--> <!--
spring在创建对象的时候,声明bean,就是告诉spring要创建某个类的对象
id: 这个对象自定义名称,唯一,spring通过这个id能找到对象
class:类的全限定名称(不能是接口的,因为spring是反射机制创造对象的) spring就完成这样的工作 SomeService someService = new SomeServiceImpl(); spring是把创建好的对象放入到map中,spring框架中有一个map存放对象
spring.put(id值,对象)
例:springMap.put("someService",new SomeServiceImpl()); 一个 bean 标签声明一个对象
--> <bean id="someService" class="com.md.service.impl.SomeServiceImpl" /> </beans>
  1. spring在创建对象的时候,声明bean,就是告诉spring要创建某个类的对象
  2. id: 这个对象自定义名称,唯一,spring通过这个id能找到对象
  3. class:类的全限定名称(不能是接口的,因为spring是反射机制创造对象的)

5. 定义测试类

spring默认创建对象的时间:在创建spring的容器时,就创建配置文件中的<所有对象>

spring创建对象,默认调用的是无参的构造方法

   @Test
public void test02(){
// 使用spring容器创建对象,spring配置文件在类路径下
// 1. 指定spring配置文件名称
String config = "beans.xml"; //2. 表示创建spring容器的对象, ApplicationContext
// ApplicationContext就是表示Spring容器,通过容器获取对象了
// ClassPathXmlApplicationContext:表示从类路径中加载spring的配置文件,
// 如图所示,得把beans.xml放到编译好的target下面的classes中
// 若自动放的话这里就不用放了,如果出现找不到这个文件的时候手动放就行了
ApplicationContext ac = new ClassPathXmlApplicationContext(config); System.out.println("------------------"); //3. 从容器中获取某个对象, 你要调用对象的方法
//getBean("配置文件中的bean的id值")
SomeService someService = (SomeService) ac.getBean("someService"); // 4. 使用spring创建好的对象来调用方法
someService.doSome(); // 我是SomeServiceImpl的无参构造方法
// ------------------
// 执行了SomeServiceImpl的doSome()方法 }

当运行报错找不到beans.xml文件的时候,手动复制一个就可以了

6. 使用spring创建非自定义类对象

在Spring的配置文件beans.xml中添加

 <!--
spring能创建一个非自定义类的对象吗?创建一个已经存在的类的对象
--> <bean id="mydate" class="java.util.Date" />

在测试类

 /**
* 获取一个非自定义的类的对象
*/
@Test
public void test04(){
String config = "beans.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config); // 获取对象
Date d = (Date) ac.getBean("mydate");
System.out.println(d);
}

7. 获取spring容器中java对象的信息

   @Test
public void test03(){ String config = "beans.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(config); // 使用spring提供的方法,获取容器中定义的对象的数量
int count = ac.getBeanDefinitionCount();
System.out.println(count); // 容器中定义的每个对象的名称
String[] names = ac.getBeanDefinitionNames(); for (String name : names) {
System.out.println(name);
} }

三、使用Spring框架的步骤

  1. 加入依赖
  <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
  1. 创建类:接口、实现类、或者没有接口的类
  2. 创建spring的配置文件,使用<bean>标签声明对象
 <bean id="someService" class="com.md.service.impl.SomeServiceImpl" />
  1. 我们使用容器中的对象,通过ApplicationContext接口和它的实现类ClassPathXmlApplicationContext的方法getBean("要使用的id")

四、总结

1. 什么是spring

  1. 是一个框架,核心技术是ioc、aop,实现解耦合
  2. spring是一个容器,容器中存放的是java对象,需要做的是把对象放入到容器中

2. 怎么使用spring

  1. spring是一个容器,把项目中用的对象放入到容器中
  2. 让容器完成对象的创建、对象之间的关系的管理也就是属性的赋值
  3. 我们在程序中从容器中获取到想使用的对象

3. 什么样的对象放入容器中

  1. dao类、service类、controller类、工具类
  2. spring中对象默认都是单例,在容器中这个对象只有一个

4. 不放入spring容器中的对象

  1. 实体类对象,实体类的数据是来自数据库的
  2. servlet、listener、filter等(这几个是来自Tomcat的)

Spring的第一个程序的更多相关文章

  1. 借助Maven入手Spring Boot第一个程序

    目前网上有不少Spring Boot的入门文章,都很有帮助,本人最近在深入学习Spring Cloud,在搭建第一个Hello World程序时,感觉对于新手而言,介绍文章怎么详细都不为过,因为其中坑 ...

  2. Spring框架第一篇之Spring的第一个程序

    一.下载Spring的jar包 通过http://repo.spring.io/release/org/springframework/spring/地址下载最新的Spring的zip包,当然,如果你 ...

  3. Spring写第一个应用程序

    ref:http://www.importnew.com/13246.html 让我们用Spring来写第一个应用程序吧. 完成这一章要求: 熟悉Java语言 设置好Spring的环境 熟悉简单的Ec ...

  4. spring的第一天

    spring的第一天 ssm框架 spring  Spring是什么? Spring是容器框架,用来配置(装)Bean,并且维护Bean之间的关系.其中Bean可以是Java中的任何一种对象,可以是J ...

  5. Spring框架第一天

    ## 今天课程:Spring框架第一天 ## ---------- **Spring框架的学习路线** 1. Spring第一天:Spring的IOC容器之XML的方式,Spring框架与Web项目整 ...

  6. Spring实战第一章学习笔记

    Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...

  7. 04 Spring:01.Spring框架简介&&02.程序间耦合&&03.Spring的 IOC 和 DI&&08.面向切面编程 AOP&&10.Spring中事务控制

    spring共四天 第一天:spring框架的概述以及spring中基于XML的IOC配置 第二天:spring中基于注解的IOC和ioc的案例 第三天:spring中的aop和基于XML以及注解的A ...

  8. Spring Boot 第一弹,问候一下世界!!!

    持续原创输出,点击上方蓝字关注我吧 目录 前言 什么是Spring Boot? 如何搭建一个Spring Boot项目? 第一个程序 Hello World 依赖解读 什么是配置文件? 什么是启动类? ...

  9. Android开发-之第一个程序:HelloWorld!

    小编觉得不管学习什么编程的时候,第一个程序都是要求打印输出一个"HelloWorld!",那就从最简单的HelloWorld开始吧!哈哈~~~~ 一.创建一个Android工程 1 ...

随机推荐

  1. C# 接口与抽象类的区别? 情景下使用接口,什么情景下使用抽象类?

    接口与抽象类的区别: 接口支持多继承:抽象类不能实现多继承. 接口可以用于支持回调:抽象类不能实现回调,因为继承不支持. 接口只包含方法.属性.索引器.事件的签名,但不能定义字段和包含实现的方法:抽象 ...

  2. 小谢第36问:elemet - table表格修改后表格行高亮显示且定位到当前行当前页

    第一次做这个需求得时候很乱,总是在表格页和修改页徘徊,总觉得什么都会,但是就是做不出自己想要得效果 其实如果先把思路搞清楚,这个问题得知识点却是不多,以下是我对表格高亮显示得思路: 首先,我会从已知得 ...

  3. [Qt2D绘图]-01Qt2D绘图基本绘制和填充

    Qt的文档位置为 Paint System   大纲:     简介     先看一个小例子     基本的绘制和填充         使用画笔(Qpen)         使用画刷(QBrush) ...

  4. 【Python学习笔记七】从配置文件中读取参数

    将一些需要更改或者固定的内容存放在配置文件中,通过读取配置文件来获取参数,这样修改以及使用起来比较方便 1.首先是配置文件的写法如下一个environment.ini文件: 里面“[]”存放的是sec ...

  5. 设计模式:fly weight模式

    目的:通过共享实例的方式来避免重复的对象被new出来,节约系统资源 别名:享元模式 例子: class Char //共享的类,轻量级 { char c; public: Char(char c) { ...

  6. 使用python打造一款音乐播放器

    作者qq:64761294 编程/考试交流群:834531270 欢迎交流 核心播放模块(pygame内核) import time import pygame import easygui as g ...

  7. select、poll和epoll之间的区别

    在深入理解select.poll和epoll之间的区别之前,首先要了解什么是IO多路复用模型. IO多路复用 简单来说,IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备就绪,它就通知该进 ...

  8. C#结合SMTP实现邮件报警通知

    写在前面 C#是微软推出的一门面向对象的通用型编程语言,它除了可以开发PC软件.网站(借助 http://ASP.NET)和APP(基于 Windows Phone),还能作为游戏脚本,编写游戏逻辑. ...

  9. MySQL组复制MGR(二)-- 组复制搭建

    (一)主机操作 (1)路由信息vmnet5 192.168.10.0 (2)主机信息 主机名称 IP地址 操作系统版本 数据库版本 mgr-node1 192.168.10.11 centos 7.4 ...

  10. ~~并发编程(十三):信号量,Event,定时器~~

    进击のpython ***** 并发编程--信号量,Event,定时器 本节需要了解的就是: 信号量,以及信号量和互斥锁的区别 了解时间和定时器,以及使用 信号量 信号量也是锁,本质没有变!但是他跟互 ...