Spring 自学笔记

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中创建对象有哪些方式:

  1. 构造方法 ,new Student()
  2. 反射
  3. 序列化
  4. 克隆
  5. ioc :容器创建对象
  6. 动态代理

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>

后续更新…

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值