1. 什么是Spring框架 (开发人员的春天)

  • 一个开源的容器框架
  • 可以通过Spring来管理所有的组件(类)
  • 很多功能能够根据容器的简单配置来实现
  • Spring的核心功能:IOC和AOP

2. Spring的优点:

  • 非侵入式:基于Spring开发的应用程序中的对象可以不依赖于Spring的API。项目不依赖于API
  • 依赖注入:IOC / DI
  • 面向切面编程:AOP
  • 容器:Spring是一个容器,包含并且管理应用对象的生命周期
  • 组件化:Spring中所有的功能,都是抽取成了单独的组件,用了加上不用了删掉,灵活性很高,复杂性低,导包简单
  • 一站式:用好一个Spring,可以熟悉其他的所有框架。Spring自身也提供了表述层的SpringMVC和持久层的Spring JD

3. Spring框架核心:ioc+aop

3.1. IOC

什么是IOC?
1.控制反转,把对象创建和对象之前调用过程,交给Spring进行管理
2.使用IOC的目的:降低代码耦合度
3.控制:资源的获取方式

3.1.1. 主动式:要什么资源就自己创建即可

BookServlet{
    BookService bs = new BookService();//简单对象,没什么问题
    AirPlane ap = new AirPlane();//无功能,所以在复杂对象的创建时,是一个庞大的工程。
}

3.1.2. 被动式:资源的获取不是自己创建,而是交给一个容器来创建和设置;

BookServlet{
BookService bs;
public void test01(){
     bs.checkout();//在当前阶段会空指针异常
}
}

3.2. DI:(Dependency Injection 依赖注入)

  • IOC是一种思想,DI基于这种思想实现的描述
  • 容器能够知道哪个组件运行的时候,需要另一个类;
  • 容器通过反射的形式,将容器中准备好的BookService对象注入(利用反射给属性赋值)到BookServlet中;
  • 只要是容器管理的组件,都能够使用容器提供的强大功能。

4. 如何给容器中注册组件

以前是自己new对象,现在是所有的对象都交给容器来创建;
框架编写流程:

  • 导包
  • 写配置
  • 测试
repositories {
    mavenCentral()
    maven{//2.其次查找aliyun maven库
        url'https://maven.aliyun.com/nexus/content/groups/public/'
    }
}
dependencies {
    implementation 'org.springframework:spring-context:5.3.31'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
}

5. IOC操作bean管理(基于xml)

5.1. 基于xml配置文件方式的实现

applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd">     
<bean id="sweetApple" class="cn.qzzg.ioc.bean.Apple">
        <property name="title" value="红富士"></property>
        <property name="origin" value="欧洲"></property>
        <property name="color" value="红色"></property>
</bean>
</beans>

5.2. XML方式创建IoC容器

 ApplicationContext context = new 
ClassPathXmlApplicationContext("classpath:applicationContext.xml");

5.3. 实例化Bean的三种方式

  • 基于构造方法对象实例化
  • 基于静态工厂实例化
  • 基于工厂实例方法实例化

5.4. id与name属性相同点

  • bean id与name都是设置对象在IoC容器中唯一标识
  • 两者在同一个配置文件中都不允许出现重复
  • 两者允许在多个配置文件中出现重复,新对象覆盖旧对象

5.5. id与name属性区别

  • id要求更为严格,一次只能定义一个对象标识(推荐)
  • name更为宽松,一次允许定义多个对象标识
  • tips: id与name的命名要求有意义,按驼峰命名书写

6. 对象依赖注入

依赖注入是指运行时将容器内对象利用反射赋给其他对象的操作
基于setter方法注入对象基于构造方法注入对象

6.1. 利用setter实现静态数值注入

<bean id="sweetApple" class="cn.qzzg.ioc.bean.Apple">
        <property name="title" value="红富士"></property>
        <property name="origin" value="欧洲"></property>
        <property name="color" value="红色"></property>
  </bean>

6.2. 利用setter实现对象注入

<bean id="lily" class="cn.qzzg.ioc.bean.Child">
        <property name="name" value="莉莉"/>
        <property name="apple" ref="sweetApple"/>
</bean>

6.3. 注入集合对象

<bean id="somejh" class="cn.qzzg.ioc.bean.Child">
        <!--数组类型属性注入-->
        <property name="courses">
            <array>
                <value>java</value>
                <value>c</value>
                <value>c++</value>
                <value>算法</value>
                <value>mysql</value>
            </array>
        </property>
        <!--list类型属性注入-->
        <property name="list">
            <list>
                <value>张三</value>
                <value>小w</value>
            </list>
        </property>
        <!--map类型属性注入-->
        <property name="maps">
            <map>
                <entry key="JAVA" value="java"></entry>
                <entry key="C" value="c"></entry>
            </map>
        </property>
        <!--set类型属性注入-->
        <property name="sets">
            <set>
                <value>MySQL</value>
                <value>Redis</value>
            </set>
        </property>
    </bean>

7. 基于注解配置IoC容器

7.1. 什么是注解

  • 注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值)
  • 使用注解,注解作用在类上面,方法上面,属性上面
  • 使用注解目的:简化xml配置

7.2. 基于注解的优势

  • 摆脱繁琐的XML形式的bean与依赖注入配置
  • 基于"声明式"的原则,更适合轻量级的现代企业应用
  • 让代码可读性变得更好,研发人员拥有更好的开发体验

7.3. 三类注解

  • 组件类型注解-声明当前类的功能与职责
  • 自动装配注解-根据属性特征自动注入对象
  • 元数据注解-更细化的辅助IoC容器管理对象的注解

9. AOP

9.1. 什么是aop

  • Spring AOP - Aspect Oriented Programming 面向切面编程
  • AOP的做法是将通用、与业务无关的功能抽象封装为切面类
  • 切面配置目标方法可在的执行前、后运行,真正做到即插即用

9.2. 主要功能

  • 日志记录
  • 性能统计
  • 安全控制
  • 事务处理
  • 异常处理

10. AOP操作

10.1. Spring框架一般基于AspectJ实现AOP操作

AspectJ不是Spring组成部分,独立AOP框架,一般把AspectJ和Spring框架一起使用,进行AOP操作
10.2. 切入点表达式

  • 切入点表达式作用:知道对哪个类型里面的哪个方法进行增强
  • 语法结构: execution([权限修饰符] [返回类型] [类全路径] [方法名称] [参数列表])

波波鱼
4 声望3 粉丝