转载请标明出处:https://blog.csdn.net/men_ma/article/details/106847165.
本文出自 不怕报错 就怕不报错的小猿猿 的博客
什么是spring?SSH指的又是什么?spring之ioc(控制反转)如何理解?
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的注入方式及各类类型.