目录
前言
1、初识spring框架
1.1 Spring框架是什么?
1.2 Spring框架的优点
1.3 Spring框架的体系结构
2、控制反转
2.1 什么是控制反转?
2.2 创建maven工程
2.3 修改pom.xml
2.4 创建接口和实现类
2.5 定义Spring容器配置文件
2.6 编写测试类
3、小结
前言
声明:本专栏文章均为观看动力节点王鹤老师三大框架的视频所撰写的笔记,笔者实力有限,内容如有错误欢迎各位小伙伴在评论区指出。
视频链接:SSM-Spring
本篇作为一个引入,从概念和优势上了解Spring框架,从创建类对象的角度展示Spring框架的控制反转的设计思想。
1、初识Spring框架 1.1 Spring框架是什么?
1.Spring的起源
Spring框架是于2003 年兴起的一个轻量级的Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IoC)和面向切面编程(AOP)。帮助开发人员创建对象并且管理它们之间的依赖关系以及生死存亡。
2.Spring的主要作用:
Spring的主要作用就是为代码“解耦”,降低代码间的耦合度。
3.Spring的功能特点:
1.2 Spring框架的优点功能特点就是Spring的两大核心,控制反转IOC和面向切面编程AOP。有了控制反转程序员不需要再去手动创建对象,只需要提供对象的名称,Spring拿到名称后利用反射自动帮我们创建对象,美滋滋,终究是我负了new哈哈;而有了面向切面以后,许多重复的不是很重要但必须写的业务代码,比如事务、日志就可以类似于模板一样事先写好,然后就是你有我有大家有了,哪里需要贴哪里,这里必须给Spring的攻城狮们献上膝盖。
1.轻量:
Spring框架使用的jar包都比较小, 一般在1M以下或者几百kb。Spring核心功能的所需的jar总共在3M左右。因此 ,Spring框架运行占用的资源少,运行效率高。一个字,浓缩的都是精华!
2.面向接口编程,舒服:
Spring提供了Ioc控制反转,由容器管理对象与对象的依赖关系。原来在程序代码中的对象创建方式,现在由容器完成,实现对象之间的依赖解耦合。
3.支持切面编程,牛逼:
通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付 在Spring中,开发人员可以从繁杂的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
4.方便集成其他框架,内行:
Spring不排斥各种优秀的开源框架,相反Spring可以降低各种框架的使用难度,Spring提供了对各种优秀框架(如Struts,Hibernate、MyBatis)等的直接支持。简化框架的使用。 Spring像插线板一样,其他框架是插头,可以容易的组合到一起。需要使用哪个框架,就把这个插头放入插线板。不需要可以轻易的移除。不放张插件的图都对不起你这么优秀。
1.3 Spring框架的体系结构说到体系结构,直接官网抄起,啊不,是借鉴,博主向来以得服人。
Spring体系结构:
Spring的模块众多,简直不要太强大,共有7个大模块,分类及功能如下:
模块一:数据访问和集成 JDBC + ORM+JMS+OXM+Transaction
模块二:web应用 Web+WebSocket+Servlet+Portlet
模块三:面向切面编程 Aop + Aspects
模块四:提供JVM的代理 Instrumentation
模块五:消息发送 Messaging
模块六:核心容器 Core+Beans+Context+SpEL
模块七:测试 Test
2、控制反转 2.1 什么是控制反转?
介绍控制反转前,我们先了解几个名词。
1.对象的控制权:
所谓控制权就是指对象的创建是由谁执行的,java关于对象的创建有好几种方式,这里重点关注涉及到的两个比较重要的:
方式1:new 关键字 new 类名()
方式2:反射 Class.forName("类名").newInstance()
在对象究竟由谁来创建的问题上,我们会发现,当利用new关键字创建对象时,下一步就是直接在内存中为该类开辟空间,然后将对象的引用返回;而当我们用反射创建对象时,我们是给出类的名字,它下一步并不是直接在内存为对象开辟空间,而是将类名上交给java中的Class类,由Class类执行new的 *** 作,然后在内存中开辟空间,最后将对象的引用返回给我们。
从关系上看,方式一中创建者和被创建的对象之间具有直接关系,方式二在方式一的基础上加入了第三者,创建者和被创建的对象经过隔离由;直接关系从创变成了间接关系;从创建者的控制角度来看,方式一中直接控制对象的创建,方式二中只能控制自己所提供的类名称,真正的类创建过程就不受创建者控制了,也就是所谓的控制反转。
2.依赖:
A类中含有B类的实例,在A中调用B的方法完成相应的功能,即A对B有依赖。例如:
Class A{ //A的构造方法 public A(){}; //创建一个B的实例 Class b = new B(); //执行B中的方法 b.function(); } class B{ //构造方式 public B(){}; //function public static void function(){ System.out.println("B的方法执行了"); } }
3.容器:
顾名思义,容器就是一个可以放东西的地方,java中说到存放东西的无非就是数组和集合,spring容器本质上就是一种集合,用来存放我们的类对象,并且是以键值对的形式。
spring的核心容器:org.springframework.context.ApplicationContext 接口
spring的核心容器接口的实现类:1. ClassPathXmlApplicationContext (常用的)
2. FileSystemXmlApplicationContext
了解了上面三个概念后,我们就来看一下控制反转IOC的概念:
由程序代码直接 *** 控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值,依赖的管理。
Spring框架使用依赖注入(DI)实现IoC:
2.2 创建maven工程Spring容器就像一个大工厂,负责创建、管理所有的Java对象。在这个大工厂中,Java对象被称为Bean。由Spring容器管理着容器中Bean之间的依赖关系,Spring使用“依赖注入”的方式来管理Bean之间的依赖关系。使用IoC实现对象之间的解耦和。
依赖注入DI是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于spring容器,由容器创建后传递给程序。
IDEA 工具栏--->File--->New--->Project--->Maven
2.3 修改pom.xml安利一个巨好用的依赖网站mvnrepository.com,强烈建议收藏,再也不迷路!!!
导入相关依赖:
依赖1:spring-context(spring) 5.2.5
依赖2:junit(单元测试) 4.11
2.4 创建接口和实现类junit junit4.11 test org.springframework spring-context5.2.5.RELEASE
SomeService接口:
package com.bjpowernode.service; public interface SomeService { void doSome(); }
SomeService实现类:
package com.bjpowernode.service.impl; import com.bjpowernode.service.SomeService; public class SomeServiceImpl implements SomeService { public SomeServiceImpl() { System.out.println("SomeServiceImpl的无参数构造方法"); } @Override public void doSome() { System.out.println("执行了SomeServiceImpl的doSome()方法"); } }2.5 定义Spring容器配置文件
在src/main/resources/目录现创建一个xml文件作为spring的容器配置文件,文件名可以随意,建议命名为applicationContext.xml。
:用于定义一个实例对象。一个实例对应一个bean元素; id:该属性是Bean实例的唯一标识,程序通过id属性访问Bean,Bean与Bean间的依赖关系也是通过id属性关联的。;
class:指定该Bean所属的类,注意这里只能是类,不能是接口。
2.6 单元测试
测试方法:
@Test public void test02(){ //使用spring容器创建的对象 //1.指定spring配置文件的名称 String config="beans.xml"; //2.创建表示spring容器的对象, ApplicationContext // ApplicationContext就是表示Spring容器,通过容器获取对象了 // ClassPathXmlApplicationContext:表示从类路径中加载spring的配置文件 ApplicationContext ac = new ClassPathXmlApplicationContext(config); //从容器中获取某个对象, 你要调用对象的方法 //getBean("配置文件中的bean的id值") SomeService service = (SomeService) ac.getBean("someService"); //使用spring创建好的对象 service.doSome(); }
测试结果:
3、小结对于spring的学习仍然任重而道远,控制反转也必将是接下来学习中的重中之重,关于它的理解和运用我相信随着学习的加深,也必将会有缘溪行,忘路之远近,忽逢桃花林般的惊喜遥遥相待,让我们一起加油,努力努力再努力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)