什么是spring?SSH指的又是什么?spring之ioc(控制反转)如何理解?及IOC的具体实现在哪?

转载请标明出处:https://blog.csdn.net/men_ma/article/details/106847165.
本文出自 不怕报错 就怕不报错的小猿猿 的博客

1.什么是spring,它能够做什么?

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架

其他框架能够做的功能,那么spring都能做,因为spring有一个全家桶的概念,spring旗下有很多很多的框架,比如hibernate,struts等等,spring都有类似的框架,如下图所示(便于理解什么是spring框架,细品
在这里插入图片描述

spring包含的模块:
在这里插入图片描述

2.什么是控制反转(或依赖注入) ioc?

控制反转(IoC=Inversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
IoC还有一个另外的名字:“依赖注入 (DI=Dependency Injection)” ,即由容器动态的将某种依赖关系注入到组件之中

如下思维导图,可以更好的去理解spring中的IOC(标题不要太在乎啦,哈哈哈哈,主要看内容)
在这里插入图片描述
对于IOC是什么,博主推荐参考这篇博客 https://www.iteye.com/blog/jinnianshilongnian-1413846.

3.案例(建立在maven项目之上)目标:ioc的具体体现

目录:
在这里插入图片描述

顺序流程:

3.1 导入jar包,pom.xml中配置(第一步)

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.xiaoqing</groupId>
  <artifactId>xiao_spring</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>xiao_spring Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
   <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>

		<junit.version>4.12</junit.version>
		<servlet.version>4.0.0</servlet.version>
		<hibernate.version>5.2.12.Final</hibernate.version>
		<mysql.driver.version>5.1.46</mysql.driver.version>
	</properties>
  
  <dependencies>
     <dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>${servlet.version}</version>
			<scope>provided</scope>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>${hibernate.version}</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql.driver.version}</version>
		</dependency>
		
		<dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-context</artifactId>
		  <version>5.0.1.RELEASE</version>
		</dependency>
  </dependencies>
  <build>
    <finalName>xiao_spring</finalName>
     <plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.7.0</version>
				<configuration>
					<source>${maven.compiler.source}</source>
					<target>${maven.compiler.target}</target>
					<encoding>${project.build.sourceEncoding}</encoding>
				</configuration>
			</plugin>
		</plugins>
  </build>
</project>

3.2 创建spring的配置文件spring-context.xml文件(第二步)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

就得到
在这里插入图片描述

3.3 写一个接口类UserBiz.java(第三步)

package com.xiaoqing.ioc.biz;

/**
 * 通过企业的案例来讲解使用spring ioc 的必要性
 * v1.0:实现游戏的上传功能
 * v2.0:对游戏的上传功能进行优化
 * 
 * ioc的具体体现
 * 
 * @author 晴sister
 *
 */
public interface UserBiz {
	public void upload();
}

3.4 写UserBiz.xml的实现类UserBizImpl1.java实现基础功能(第四步)

package com.xiaoqing.ioc.biz;

public class UserBizImpl1 implements UserBiz{
	@Override
	public void upload() {
		// TODO Auto-generated method stub
		System.out.println("实现用户上传的功能");
	}
}

3.5 写UserBiz.xml的实现类UserBizImpl2.java实现优化性能功能(第五步)

package com.xiaoqing.ioc.biz;

public class UserBizImpl2 implements UserBiz{

	@Override
	public void upload() {
		// TODO Auto-generated method stub
		System.out.println("开始优化性能的代码");
		System.out.println("实现用户上传的功能");
	}
}

3.6 UserAction.java(第六步)

//ioc的具体体现
	private UserBiz userBiz;
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void upload() {
		userBiz.upload();
	}

3.7 OrderAction.java(第七步)

private UserBiz userBiz;
	public UserBiz getUserBiz() {
		return userBiz;
	}
	public void setUserBiz(UserBiz userBiz) {
		this.userBiz = userBiz;
	}
	public void upload() {
		userBiz.upload();
	}

3.8 spring-context配置文件(第八步)

	<!--*********************************IOC*********************************  -->
	<bean class="com.xiaoqing.ioc.biz.UserBizImpl2" id="userBiz"></bean>
	<bean class="com.xiaoqing.ioc.web.UserAction" id="xxx">
		<property name="userBiz" ref="userBiz"></property> 
	</bean>
	
	<bean class="com.xiaoqing.ioc.web.OrderAction" id="ttt">
		<property name="userBiz" ref="userBiz"></property>
	</bean>
</beans>
	

3.9 测试IocTest.java(第九步)

public class IocTest {
	public static void main(String[] args) {
		ApplicationContext springContext = new ClassPathXmlApplicationContext("/spring-context.xml");
//		得到id为xxx的bean
		UserAction userAction =(UserAction)springContext.getBean("xxx");
//		得到id为ttt的bean
		OrderAction orderAction =(OrderAction)springContext.getBean("ttt");
		userAction.upload();
		orderAction.upload();
	}
}

测试结果:
在这里插入图片描述

如果客户需要要求要userBizImpl1.java的版本:那么只需要在此处改一下就好了
在这里插入图片描述
那么运行结果:
在这里插入图片描述

对于此上博主小总结:以前我们如果要换一个功能,则需要修改很多处地方,而现在我们只需要改spring-context.xml文件中bean的class就好了,userAction和OrderAction是实现不同的功能的,但他们都用了UserBiz属性去调用后台代码的方法,所以这就是ioc的具体实现

4.SSH框架指的是什么?struts2+spring+hibernate

1.1 中间层框架、万能胶
struts2
spring
hibernate
1.2 容器框架
JavaBean 项目中的一个个类
IOC和AOP

此篇博客还有后续,怕文章幅度过长,所以分开写了
链接: spring之IOC的注入方式及各类类型.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值