Spring 自学笔记
前言
Spring全家桶:spring,springmvc,spring boot,spring cloud.
spring : 出现时间2002年左右,解决企业开发难度。
作用:减轻对项目模块之间的管理,类和类之间的管理,帮助开发人员创建对象,管理对象之间的关系。
核心技术:ioc,aop。能实现模块之间,类之间的解耦合。
spring是一个容器负责管理系统中的重要对象
spring容器负责协调对象之间的关系
spring管理的对象无须依赖容器
spring 官网:https://spring.io
spring 优点
- 轻量
- 针对接口编程,解耦合
- aop 编程的支持
- 方便集成各种优秀框架
spring-conetxt 和 spring-webmvc是spring中的两个模块
spring-context:是ioc功能的,创建对象的。
spring-webmvc做web开发使用的, 是servlet的升级。
spring-webmvc中也会用到spring-context中创建对象的功能的。
目录
一、Spring 框架
1.1 Ioc概念
IoC (Inversion of Control) : 控制反转, 是一个理论,概念,思想。
描述的:把对象的创建,赋值,管理工作都交给代码之外的容器实现, 也就是对象的创建是有其它外部资源完成。
控制: 创建对象,对象的属性赋值,对象之间的关系管理。
反转: 把原来的开发人员管理,创建对象的权限转移给代码之外的容器实现。 由容器代替开发人员管理对象。创建对象,
给属性赋值。
正转:由开发人员在代码中,使用new 构造方法创建对象, 开发人员主动管理对象。
public static void main(String args[]){
Student student = new Student(); // 在代码中, 创建对象。--正转。
}
容器:是一个服务器软件, 一个框架(spring)
为什么要使用 ioc : 目的就是减少对代码的改动, 也能实现不同的功能。 实现解耦合。
java中创建对象有哪些方式:
- 构造方法 ,
new Student()
- 反射
- 序列化
- 克隆
- ioc :容器创建对象
- 动态代理
ioc的体现:
servlet 1: 创建类继承HttpServelt
2: 在web.xml 注册servlet , 使用
<servlet-name> myservlet </servlet-name>
<servelt-class>com.bjpwernode.controller.MyServlet1</servlet-class>
3. 没有创建 Servlet对象, 没有 `MyServlet myservlet = new MyServlet()`
4. Servlet 是Tomcat服务器它能你创建的。 Tomcat也称为容器
Tomcat作为容器:里面存放的有Servlet对象, Listener , Filter对象
1.2 Ioc 技术实现
IoC的技术实现 ,
DI 是ioc的技术实现,
DI(Dependency Injection) :依赖注入, 只需要在程序中提供要使用的对象名称就可以, 至于对象如何在容器中创建,
赋值,查找都由容器内部实现。
spring是使用的di实现了ioc的功能, spring底层创建对象,使用的是反射机制。
spring是一个容器,管理对象,给属性赋值, 底层是反射创建对象。
spring是一个容器,管理对象,给属性赋值, 底层是反射创建对象。
1.3 spring 第一个程序
1.3.1 创建maven 项目
打开idea 创建新的工程 选择maven 搭建项目,最后将maven 搭建成如下:
补齐创建的文件夹,设置其文件夹属性,在Idea 选项中
实现步骤如下:
1.3.2 加入maven 的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
插件
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins> </build>
1.3.3 创建类
1.3.4 创建配置spring.xml 文件
beans.xml 文件介绍
1.3.5 创建测试方法 测试创建的spring
容器创建,从容器中获取对象,从而调用对象的方法
spring创建对象时是调用无参构造方法。
从容器获得对象的个数和名字数组如下
1.4 Junit 单元测试
junit : 单元测试, 一个工具类库,做测试方法使用的。
单元:指定的是方法, 一个类中有很多方法,一个方法称为单元。
使用单元测试
1.需要加入junit依赖。
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
2.创建测试作用的类:叫做测试类
src/test/java目录中创建类
3.创建测试方法
1)public 方法
2)没有返回值 void
3)方法名称自定义,建议名称是test + 你要测试方法名称
4)方法没有参数
5)方法的上面加入 @Test ,这样的方法是可以单独执行的。 不用使用main方法。
1.5 基于XML的DI (设值注入)
1.5.1 注入分类
注入:就是赋值的意思
简单类型: spring中规定java的基本数据类型和String都是简单类型。
di:给属性赋值
实现步骤
1.5.2 set 注入
- set注入(设值注入) :spring调用类的set方法, 你可以在set方法中完成属性赋值
1)简单类型的set注入
<bean id="xx" class="yyy">
<property name="属性名字" value="此属性的值"/>
一个property只能给一个属性赋值
<property....>
</bean>
实体类需要存在属性的 set方法才能赋值
value 值 无论什么类型的变量,所有的属性值必须放在引号之中。必须set 方法存在。
- 引用类型的set 注入
1.5.3 构造注入
2.构造注入:spring调用类有参数构造方法,在创建对象的同时,在构造方法中给属性赋值。
构造注入使用 标签
标签:一个表示构造方法一个参数。
标签属性:
name:表示构造方法的形参名
index:表示构造方法的参数的位置,参数从左往右位置是 0 , 1 ,2的顺序
value:构造方法的形参类型是简单类型的,使用value
ref:构造方法的形参类型是引用类型的,使用ref
<!--使用name属性实现构造注入 *推荐-->
<bean id="myStudent" class="com.bjpowernode.ba03.Student" >
<constructor-arg name="myage" value="20" />
<constructor-arg name="mySchool" ref="myXueXiao" />
<constructor-arg name="myname" value="周良"/>
</bean>
<!--使用index属性-->
<bean id="myStudent2" class="com.bjpowernode.ba03.Student">
<constructor-arg index="1" value="22" />
<constructor-arg index="0" value="李四" />
<constructor-arg index="2" ref="myXueXiao" />
</bean>
<!--省略index-->
<bean id="myStudent3" class="com.bjpowernode.ba03.Student">
<constructor-arg value="张强强" />
<constructor-arg value="22" />
<constructor-arg ref="myXueXiao" />
</bean>
<!--声明School对象-->
<bean id="myXueXiao" class="com.bjpowernode.ba03.School">
<property name="name" value="清华大学"/>
<property name="address" value="北京的海淀区" />
</bean>
<!--创建File,使用构造注入-->
<bean id="myfile" class="java.io.File">
<constructor-arg name="parent" value="D:\course\JavaProjects\spring-course\ch01-hello-spring" />
<constructor-arg name="child" value="readme.txt" />
</bean>
<!--创建File,使用构造注入-->
<bean id="myfile" class="java.io.File">
<constructor-arg name="parent" value="D:\course\JavaProjects\spring-course\ch01-hello-spring" />
<constructor-arg name="child" value="readme.txt" />
</bean>
后续更新…