Spring的第一个程序
一、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>
- spring在创建对象的时候,声明bean,就是告诉spring要创建某个类的对象
- id: 这个对象自定义名称,唯一,spring通过这个id能找到对象
- 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框架的步骤
- 加入依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
- 创建类:接口、实现类、或者没有接口的类
- 创建spring的配置文件,使用<bean>标签声明对象
<bean id="someService" class="com.md.service.impl.SomeServiceImpl" />
- 我们使用容器中的对象,通过ApplicationContext接口和它的实现类ClassPathXmlApplicationContext的方法getBean("要使用的id")
四、总结
1. 什么是spring
- 是一个框架,核心技术是ioc、aop,实现解耦合
- spring是一个容器,容器中存放的是java对象,需要做的是把对象放入到容器中
2. 怎么使用spring
- spring是一个容器,把项目中用的对象放入到容器中
- 让容器完成对象的创建、对象之间的关系的管理也就是属性的赋值
- 我们在程序中从容器中获取到想使用的对象
3. 什么样的对象放入容器中
- dao类、service类、controller类、工具类
spring中对象默认都是单例,在容器中这个对象只有一个
4. 不放入spring容器中的对象
- 实体类对象,实体类的数据是来自数据库的
- servlet、listener、filter等(这几个是来自Tomcat的)
Spring的第一个程序的更多相关文章
- 借助Maven入手Spring Boot第一个程序
目前网上有不少Spring Boot的入门文章,都很有帮助,本人最近在深入学习Spring Cloud,在搭建第一个Hello World程序时,感觉对于新手而言,介绍文章怎么详细都不为过,因为其中坑 ...
- Spring框架第一篇之Spring的第一个程序
一.下载Spring的jar包 通过http://repo.spring.io/release/org/springframework/spring/地址下载最新的Spring的zip包,当然,如果你 ...
- Spring写第一个应用程序
ref:http://www.importnew.com/13246.html 让我们用Spring来写第一个应用程序吧. 完成这一章要求: 熟悉Java语言 设置好Spring的环境 熟悉简单的Ec ...
- spring的第一天
spring的第一天 ssm框架 spring Spring是什么? Spring是容器框架,用来配置(装)Bean,并且维护Bean之间的关系.其中Bean可以是Java中的任何一种对象,可以是J ...
- Spring框架第一天
## 今天课程:Spring框架第一天 ## ---------- **Spring框架的学习路线** 1. Spring第一天:Spring的IOC容器之XML的方式,Spring框架与Web项目整 ...
- Spring实战第一章学习笔记
Spring实战第一章学习笔记 Java开发的简化 为了降低Java开发的复杂性,Spring采取了以下四种策略: 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面 ...
- 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 ...
- Spring Boot 第一弹,问候一下世界!!!
持续原创输出,点击上方蓝字关注我吧 目录 前言 什么是Spring Boot? 如何搭建一个Spring Boot项目? 第一个程序 Hello World 依赖解读 什么是配置文件? 什么是启动类? ...
- Android开发-之第一个程序:HelloWorld!
小编觉得不管学习什么编程的时候,第一个程序都是要求打印输出一个"HelloWorld!",那就从最简单的HelloWorld开始吧!哈哈~~~~ 一.创建一个Android工程 1 ...
随机推荐
- ffmpeg播放器实现详解 - 视频显示
ffplay是ffmpeg源码中一个自带的开源播放器实例,同时支持本地视频文件的播放以及在线流媒体播放,功能非常强大. FFplay: FFplay is a very simple and port ...
- Python实现性能自动化测试竟然如此简单【颠覆你的三观】
一.思考 1.什么是性能自动化测试? 性能系统负载能力 超负荷运行下的稳定性 系统瓶颈 自动化测试使用程序代替手工 提升测试效率 性能自动化使用代码模拟大批量用户 让用户并发请求 多页面多用户并发 ...
- 太实用了!自己动手写软件——我们的密码PJ器终于完成了
之前我们完成了密码破解工具的界面,今天我们来看看功能实现吧. 目录 编码 提交——功能实现 开始破解——功能实现 读取密码字典 选择协议并执行破解动作 POP3协议的破解函数 IMAP协议的破解函数 ...
- 10种常见OOM分析——手把手教你写bug
点赞+收藏 就学会系列,文章收录在 GitHub JavaKeeper ,N线互联网开发必备技能兵器谱,笔记自取 在<Java虚拟机规范>的规定里,除了程序计数器外,虚拟机内存的其他几个运 ...
- Hadoop之HDFS常用文件操作命令
命令基本格式:hadoop fs -cmd < args > 1. ls 列出hdfs文件系统根目录下的目录和文件hadoop fs -ls /dirhadoop fs -ls -R /d ...
- 一起学Blazor WebAssembly 开发(3)
接着上篇,本篇开始讲下实现登录窗口,先看下大概的效果图: 打开的效果,没有美工美化 点登录校验得到不能为空 我在做blazor时用到了一个ui框架,这个框架名叫Ant Design blazor(ht ...
- js原型链结构理解
在一般的面向对象的语言中,都存在类(class)的概念,类就是对象的模板,对象就是类的实例. 但在js中是没有类的定义的(万物皆是对象). 题外话:但是在ES6中提供了更接近传统语言的写法,引入了C ...
- 新款iPad Pro4的电池续航和充电速度对比
3月18日晚苹果官网上架了两款新iPad Pro,两款iPad Pro 2020外观大小分别为11英寸和12.9英寸,搭载苹果A12Z仿生芯片,起售价分别为6288元和7899元.那么两款iPad P ...
- ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3. ...
- zookeeper 源码编译
环境:mac 1.github上下载 源码 项目地址:https://github.com/apache/zookeeper 2.安装 ant mac:brew update -> brew ...