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 ...
随机推荐
- 使用Typora写博客,图片即时上传,无需第三方图床-EasyBlogImageForTypora
背景 习惯使用markdown的人应该都知道Typora这个神器,它非常简洁高效.虽然博客园的在线markdown编辑器也不错,但毕竟是网页版,每次写东西需要登录系统-进后台-找到文章-编辑-保存草稿 ...
- YAPI工具配置LDAP统一用户认证
背景:因为搭建了LDAP,因此希望将所有配置库或工具都使用LDAP进行统一用户认证,YAPI是其中一个. YAPI:使用docker-compose进行了安装,具体安装步骤自行百度. LDAP:使用d ...
- Github下载文件慢试试这款工具吧
https://g.widora.cn 可能随时崩溃哦~~暂时还不支持超过 2GB 的仓库,服务器选自日本 vultr 设计思路:通过在日本的 VPS clone -r 代码,下载后压缩成 zip 再 ...
- [开源硬件DIY] 自制一款精致炫酷的蓝牙土壤温湿度传感器,用于做盆栽呵护类产品(API开放,开发者可自行DIY微信小程序\安卓IOS应用)
目录 前言: 1. 成品展示 2. 原理图解析 3. pcb设计 4. 嵌入式对外提供接口 4.1 蓝牙广播 4.2 蓝牙服务和属性 4.3 数据包格式 4.4 数据通信模型 重要 . 前言: 本期给 ...
- Springboot启动扩展点超详细总结,再也不怕面试官问了
1.背景 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片.Springboot更是封装了Spring,遵循约定大于配置,加上自动装配 ...
- selenium自动爬取网易易盾的验证码
我们在爬虫过程中难免会遇到一些拦路虎,比如各种各样的验证码,时不时蹦出来,这时候我们需要去识别它来继续我们的工作,接下来我将爬取网一些滑动验证码,然后通过百度的EasyDL平台进行数据标注,创建模型, ...
- 面试时谈得很好,为什么就是拿不到offer?
招聘行业有个共识,那就是如果没有给通知一般就是没有通过, 有的学员会问,为什么不打电话通知一下呢? 我猜测,有一方面的原因是怕尴尬,虽然你不觉得尴尬,但是难保有的应聘者会情绪激动,问东问西. 比如你告 ...
- 我们通常这样使用Linux弱口令检测!
在Internet环境中,过于简单的口令是服务器面临的最大风险,对于管理员来说,即使找出这些弱口令账号是非常必要的,这样便于采取进一步的安全措施. 这里的话,弱口令检测需要用到一款密码破译软件--Jo ...
- vue学习(十六) 自定义私有过滤器 ES6字符串新方法 填充字符串
<div id="app"> <p>{{data | formatStr('yyyy-MM-dd')}}</p></div> //s ...
- 【laravel】基于jwt实现用户认证
安装及基础配置 使用 composer 安装 # 建议使用1.0以上版本 composer require tymon/jwt-auth .*@rc 进行一些配置 有些文档会说要添加 Tymon\JW ...