1、Spring简介及IOC入门案例
一、Spring框架介绍
1、介绍
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
2、Spring是什么?
- Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的。
- Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
- 轻量——从大小与开销两方面而言Spring都是轻量的。
- 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。
- 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。
- 框架——Spring可以将简单的组件配置、组合成为复杂的应用。
3、Spring的体系结构
- 核心容器(Core Container)
- 数据访问/集成(Data Access/Integration)层
- Web层
- AOP(Aspect Oriented Programming)模块
- 植入(Instrumentation)模块
- 消息传输(Messaging)
- 测试(Test)模块

4、Spring的优点
- 低侵入式设计,代码的污染极低;
- 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺;
- Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦
- Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用;
- Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问;
- spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。
二、Spring核心——控制反转(IOC)
1、控制反转IOC
- IoC(Inversion Of Control)控制反转,Spring反向控制应用程序所需要使用的外部资源。
- Spring控制的资源全部放置在Spring容器中,该容器称为IoC容器。
举例:我们创建对象需要通过Person p = new Person创建对象.
Spring是个容器,我们创建对象过程只需要交给Spring就行,在我们用到对象时,spring容器已经帮我们创建好了,直接拿就好,这样做的目的是解耦。
2、耦合与内聚
- 耦合(Coupling):代码书写过程中所使用技术的结合紧密度,用于衡量软件中各个模块之间的互联程度
- 内聚(Cohesion):代码书写过程中单个模块内部各组成部分间的联系,用于衡量软件中各个功能模块内部的功能联系
- 程序书写的目标:高内聚,低耦合
- 就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依存度却不要那么紧密
3、Spring-IOC入门案例
3.1、 导入相关依赖(5.2.4.RELEASE)
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
3.2、 编写业务层和控制层代码
UserService
package com.why.service;
/**
* @author Laity
* @date 2021年11月16日 9:31
*/
public interface UserService {
void saveUser();
}
UserServiceImpl
package com.why.service.impl;
import com.why.service.UserService;
public class UserServiceImpl implements UserService {
@Override
public void saveUser() {
System.out.println("Hello,Spring............");
}
}
3.3、 建立配置文件
在resources建立Spring的配置文件(名字自定义)--------spring.xml
3.4、 配置所需资源(Service)为spring控制的资源
spring.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">
<!--
id: bean对象的id,唯一标识。一般是Bean对象的名称的首字母小写。
class: bean对象的类路径。
-->
<bean id="userService" class="com.why.service.impl.UserServiceImpl"/>
</beans>
3.5、 表现层(UserController)通过spring获取资源(Service实例)
UserController
package com.why.controller;
import com.why.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author Laity
* @date 2021年11月16日 9:41
*/
public class UserController {
public static void main(String[] args) {
//获取Spring上下文环境 (加载配置文件)
ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
/*
通过getBean方法得到Spring容器中实例化好的Bean对象 (实例化Bean对象)
userService代表的是配置文件中bean标签的id属性值(id标识唯一的bean)
*/
UserService userService = (UserService) context.getBean("userService");
userService.saveUser();
}
}
3.6、 运行结果

结果打印出来,证明Spring为我们创建了对象,我们直接拿就可以。
3.7、 Spring配置文件加载
文件在resources目录下为例:
- 根据相对路径加载配置文件
//自动在当前项目下resource目录下找spring.xml配置文件
ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");
- 根据绝对路径加载配置文件
//在电脑磁盘找到并加载配置文件
ApplicationContext ac = new FileSystemXmlApplicationContext("E:\Blog\Spring\Spring-web\src\main\resources\spring.xml");
3.8、 Spring多配置文件加载
在resources下创建两个service.xml,dao.xml
service.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">
<bean id="userService" class="com.why.service.impl.UserServiceImpl"/>
</beans>
dao.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">
<bean id="userDao" class="com.why.dao.UserDao"/>
</beans>
1. 根据相对路径加载多个配置文件
//配置文件之间用英文的逗号隔开
ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml","service.xml","dao.xml");
2. 可以通过总配置文件import其他的配置文件
spring.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--利用import标签进行导入-->
<import resource="service.xml"></import>
<import resource="dao.xml"></import>
</beans>
3. 然后根据相对路径加载spring.xml配置文件即可
ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");
Spring的IOC配置入门案例就写到这里
1、Spring简介及IOC入门案例的更多相关文章
- 【Spring】---【IOC入门案例】
第一步:导入Jar包 第二步:创建类,在类里面创建方法 public class User { public void add(){ System.out.println("-------- ...
- Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)
Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...
- 回顾Spring MVC_01_概述_入门案例
SpringMVC: SpringMVC是Spring为展现层提供的基于MVC设计的优秀的Web框架,是目前最主流的MVC框架之一 SpringMVC通过注解,让POJO成为处理请求的控制器,而无须实 ...
- Spring初识及其IOC入门
一.框架 框架是一些类和接口的集合,它一个半成品,已经对基础的代码进行了封装并提供相应的API,开发者在使用框架时直接调用封装好的api可以省去很多代码编写,从而提高工作效率和开发速度. 二.Spri ...
- spring的IOC入门案例
步骤: 一,导入jar 二,创建类,在类里创建方法 三,创建Spring配置文件,配置创建类 四,写代码测试对象创建
- Spring.Net的IOC入门
1.构造器注入 namespace Spring.Net { class Program { //构造器注入 static void Main(string[] args) { IApplicatio ...
- IDL简介与corba入门案例
IDL接口定义语言简介 IDL用中立语言的方式进行描述,能使软件组建(不同语言编写的)间相互通信. IDL提供了一个桥来连接不同的系统. Corba 上的服务用IDL描述,将被映射为某种程序设计语 ...
- Spring_day01--课程安排_Spring概念_IOC操作&IOC底层原理&入门案例_配置文件没有提示问题
Spring_day01 Spring课程安排 今天内容介绍 Spring概念 Spring的ioc操作 IOC底层原理 IOC入门案例 配置文件没有提示问题 Spring的bean管理(xml方式) ...
- Java开发学习(二)----IOC、DI入门案例
一.IOC入门案例 1.1 思路分析 (1)Spring是使用容器来管理bean对象的,那么管什么? 主要管理项目中所使用到的类对象,比如(Service和Dao) (2)如何将被管理的对象告知IOC ...
随机推荐
- 关于 RocketMQ 事务消息的正确打开方式 → 你学废了吗
开心一刻 昨晚和一哥们一起吃夜宵,点了几瓶啤酒 不一会天空下起了小雨,哥们突然道:糟了 我:怎么了 哥们:外面下雨了,我老婆还在等着我去接她 他给了自己一巴掌,说道:真他妈不是个东西 我心想:哥们真是 ...
- 逐浪CMS+百度小程序开源包发布-对接海量资源助力推广
接入百度小程序海量流量就在使用Zoomla!逐浪CMS开发栈 这里有最强的CMS内核依托于国家高新企业Zoomla!逐浪之上 这里有最海量的用户流量依托于百度小程序 这里有最开放的技术栈 这里有最卓越 ...
- Python学习周总结(一)
Python-FirstWeek知识汇总 学习了一周python,最大的感触就是要有自己的逻辑思维和发散性思维,考虑事物的广度,层层相扣即使数学逻辑不会,基本的程序功能还是可以实现的,共勉,加油~ 一 ...
- Node常用内置模块
node内置的fs模块就是文件系统模块,负责读写文件 fs同时提供了同步异步的方法 'use strict'; var fs = require('fs'); fs.readFile('test.tx ...
- 【性能优化】(2)JVM调优
JVM调优 2019-07-21 12:32:00 by冲冲 1.
- oracle和mysql的拼接查询
oracle的 SELECT * FROM sys_user a WHERE 1=1 AND a.company_id || a.login_name IN('3001rddb414') 196676 ...
- 重新整理 .net core 实践篇——— 权限中间件源码阅读[四十六]
前言 前面介绍了认证中间件,下面看一下授权中间件. 正文 app.UseAuthorization(); 授权中间件是这个,前面我们提及到认证中间件并不会让整个中间件停止. 认证中间件就两个作用,我们 ...
- python网络自动化运维之telnetlib实验(EVE-NG+pycharm)
运行环境: 物理机:win10 1903 网络设备:EVE-NG模拟器上运行思科三层路由器 网络设备OS版本:cisco ios(versions 15.6) python环境:pycharm 3.3 ...
- 力扣 - 剑指 Offer 46. 把数字翻译成字符串
题目 剑指 Offer 46. 把数字翻译成字符串 思路1(递归,自顶向下) 这题和青蛙跳台阶很类似,青蛙跳台阶说的是青蛙每次可以跳一层或者两层,跳到第 n 层有多少种解法,而这题说的是讲数字翻译成字 ...
- C++匿名函数的使用
c++匿名函数使用方法 1.匿名函数的使用 匿名函数的基本语法为: //[捕获列表](参数列表)->返回类型{函数体} int main() { auto Add = [](int a, int ...