概述

  • 下载地址:https://repo.spring.io/release/org/springframework/spring/
  • spring是开源的轻量级框架
  • spring核心的主要两部分
    • AOP :面向切面编程,扩展功能而不修改源代码
    • IOC :控制反转,对象的创建通过spring配置来实现
  • spring是一站式框架
    • web :springMVC
    • service :IOC
    • dao :JDBC

IOC

IOC的底层原理

  • 创建xml配置文件,配置要创建对象的类
    <bean id="userSevice" class="com.ljw.service.UserService">
  • bean标签的属性
    • id:值不能有特殊字符
    • class:要配置的类的路径
    • scope:创建对象的方式
      • singleton:默认值,单例
      • prototype:多例
    • name:跟id类似,但可以有特殊字符
  • 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"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.1.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
        http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd">
</beans>
  • 创建工厂类,使用dom4j解析xml配置文件+反射,得到该类的实例

属性注入(DI)

  • DI:依赖注入,向类里面的属性设置值
  • set方法
    1. 在类中定义该属性的set方法
    2. spring_context.xml 配置文件中配置相关的设置
  • 有参构造
    1. 定义有参构造方法
    2. spring_context.xml 配置文件中配置相关的设置
  • 对象属性注入
    1. 将要注入对象设置为类的属性
    2. spring_context.xml 配置文件中配置相关的设置
      spring_context.xml中的配置:

测试:

  • 复杂类型的注入

    1. Array
    2. List
    3. Map
    4. properties

Spring 的 bean 管理(注解)

  • 注解详情请查看文章:注解 @Annotation

    一、导入 jar 包

二、创建 Spring 配置文件,导入约束

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- bean definitions here -->
</beans>

三、再 Spring 中开启注解扫描

  • 如果有多个包,就填写共有的包名

四、注解创建对象

4.1 创建对象有四个注解

  • @Component
  • @Controller
  • @Service
  • @Repository
  • 目前这四个注解的功能是一致的,都是创建对象,只是为了让标注类本身的用途清晰

4.2 创建对象的方式

  • @Scope(value="singleton") 单实例
  • @Scope(value="prototype") 多实例

五、注解注入属性

  1. 创建service类,创建dao类,再service中得到dao对象

    • 用注解创建 dao 对象和 service 对象

    • 再service类中创建dao类型的属性,并用注解注入对象,有两种方式
      第一种:@Autowired

    第二种:@Resource

    • 测试

AOP

一、AOP概念

  • AOP:面向切面(方面)编程
  • AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码

二、AOP原理

三、AOP操作术语

  • Joinpoint(连接点): 类里面可以被增强的方法,这些方法称为连接点(可以被增强的方法)
  • Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.
  • Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能,在方法之前和之后执行(比如:计算程序运行的时间))
  • Aspect(切面): 是切入点和通知(引介)的结合
  • Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, - Introduction可以在运行期为类动态地添加一些方法或Field.
  • Target(目标对象):代理的目标对象(要增强的类)
  • Weaving(织入):是把增强应用到目标的过程.
    • 把advice 应用到 target的过程
  • Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类

四、使用AspectJ实现AOP

1. 介绍

  • AspectJ不是Spring的一部分,是和Spring一起使用进行AOP操作

2. 实现AOP的两种方式

  • 基于AspectJ的XML配置
  • 基于AspectJ的注解方式

3. 实现步骤

  • AOP操作准备

    • 导入基本jar包和AOP相关的jar包

    • 导入AOP约束
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
          http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <!-- bean definitions here -->
    </beans>
  • 使用表达式配置切入点
    • 切入点:实际增强的方法
    • 常用的表达式:execution 表达式
  • 增强类
package com.ljw.spring.annotation;

import org.aspectj.lang.ProceedingJoinPoint;
import org.springframework.stereotype.Component;

@Component(value="userAdvice")
public class UserAdvice {

    /**
     * @description 前置通知
     */
    public void userBefore() {
        System.out.println("前置通知........");
    }

    /**
     * @description 后置通知
     */
    public void userAfter() {
        System.out.println("后置通知........");
    }

    /**
     * @description 环绕通知
     * @param proceedingJoinPoint
     * @throws Throwable
     */
    public void userAround(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        // 方法之前
        System.out.println("方法之前..........");

        // 执行增强的方法
        proceedingJoinPoint.proceed();

        // 方法之后
        System.out.println("方法之后..........");
    }
}
  • 配置Spring配置文件

    • 导入约束
    • 配置AOP操作

Spring整合web项目

一、实现原理

  1. 通过 new 对象,功能可以实现,但效率很低
  1. 实现思想:把加载配置文件和创建对象过程,在服务器启动的时候完成

  2. 具体实现原理
    (1) ServletContext对象
    (2) 监听器
    (3) 具体步骤

    • 在服务器启动的时候,为每个项目创建一个ServletContext对象
    • 在 ServletContext 对象创建的时候,使用监听器可以监听 ServletContext对象什么时候创建
    • 当监听器监听到 ServletContext 对象创建的时候,加载 spring 配置文件,创建配置文件对象
    • 把创建出来的对象放到 ServletContext 域对象里面(setAttribute 方法)
    • 获取对象(getAttribute 方法)

知识点

ServletContext 对象

一、介绍

  • ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象
  • 这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫全局应用程序共享对象。

二、作用

  • 是一个域对象
  • 可以读取全局配置参数
  • 可以搜索当前工程目录下面的资源文件
  • 可以获取当前工程名字(了解)

三、域对象

  1. 域对象介绍
  • 域对象是服务器在内存上创建的存储空间,用于在不同动态资源(servlet)之间传递与共享数据。
  1. 怎样得到 ServletContext 对象
  • ServletContext servletContext = config.getServletContext();
  • ServletContext servletContext = this.getServletContext();
  1. 域对象方法
  • 凡是域对象都有如下三个方法

监听器 Listener

一、监听器模型

  • 事件:用户对组件的一个操作,或者说程序执行某个方法,称之为一个事件,如机器人程序执行工作。
  • 事件源:发生事件的组件就是事件源,也就是被监听的对象,如机器人可以工作,可以跳舞,那么就可以把机器人看做是一个事件源。
  • 事件监听器(处理器):监听并负责处理事件的方法,如监听机器人工作情况,在机器人工作前后做出相应的动作,或者获取机器人的状态信息。

二、执行步骤

  1. 给事件源注册监听器。
  2. 组件接受外部作用,也就是事件被触发。
  3. 组件产生一个相应的事件对象,并把此对象传递给与之关联的事件处理器。
  4. 事件处理器启动,并执行相关的代码来处理该事件。

execution表达式

一、语法

  • execution(<访问修饰符>?<返回类型><方法全名>(<参数>)<异常>)

二、常用的写法

  • execution(* com.ljw.spring.aop.User.add(..)) 对User类的add方法增强
  • execution(* com.ljw.spring.aop.User.*(..)) 对User类的所有方法增强
  • execution(* *.*(..)) 对所有方法增强
  • execution(* save*(..)) 对所有save开头的方法增强

Spring入门介绍的更多相关文章

  1. Spring入门介绍-AOP(三)

    AOP的概念 AOP是面向切面编程的缩写,它是一种编程的新思想.对我们经常提起的oop(面对对象编程)有一定的联系. AOP和OOP的关系 AOP可以说是oop的某一方便的补充,oop侧重于对静态的属 ...

  2. Spring入门介绍-IOC(二)

    浅谈IOC IOC(inversion of control)是Spring的核心,贯穿始终.所谓IOC 就是有Spring来控制对象的生命周期和对象间的关系. 传统开发模式:对象之间相互依赖 IOC ...

  3. Spring入门介绍(一)

    Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架,它主要是为了解决企业应用开发的复杂性而诞生的. 目的:解决企业应用开发的复杂性. 功能:使用基本的javaBean代替EJB. ...

  4. 黑马_13 Spring Boot:01.spring boot 介绍&&02.spring boot 入门

    13 Spring Boot: 01.spring boot 介绍&&02.spring boot 入门 04.spring boot 配置文件 SpringBoot基础 1.1 原有 ...

  5. Spring Boot2(001):入门介绍和一些官网链接参考

    Spring官方文档比较齐全,学习的过程中可以多参考官方文档,最权威的版本.01.Spring Boot的一些官方链接 01.01 Spring Boot官网 https://spring.io/pr ...

  6. Spring入门学习(一)

    SpringMVC基础平台补充(2016.03.03) 如果想要开发SpringMVC,那么前期依次安装好:JDK(jdk-8u74-windows-x64,安装后配置环境变量JAVA_HOME和CL ...

  7. Spring入门(10)-Spring JDBC

    Spring入门(10)-Spring JDBC 0. 目录 JdbcTemplate介绍 JdbcTemplate常见方法 代码示例 参考资料 1. JdbcTemplate介绍 JdbcTempl ...

  8. Spring入门(8)-基于Java配置而不是XML

    Spring入门(8)-基于Java配置而不是XML 本文介绍如何应用Java配置而不是通过XML配置Spring. 0. 目录 声明一个简单Bean 声明一个复杂Bean 1. 声明一个简单Bean ...

  9. Spring入门(7)-自动检测Bean

    Spring入门(7)-自动检测Bean 本文介绍如何自动检测Bean. 0. 目录 使用component-scan自动扫描 为自动检测标注Bean 1. 使用component-scan自动扫描 ...

随机推荐

  1. 使用java的循环单向链表解决约瑟夫问题

    什么是约瑟夫问题 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定 ...

  2. SpringBoot进阶教程(六十二)整合Kafka

    在上一篇文章<Linux安装Kafka>中,已经介绍了如何在Linux安装Kafka,以及Kafka的启动/关闭和创建发话题并产生消息和消费消息.这篇文章就介绍介绍SpringBoot整合 ...

  3. Java中的static(1)【持续更新】——关于Eclipse的No enclosing instance of type ... 错误的理解和改正

    No enclosing instance of type SomeClass is accessible. Must qualify the allocation with an enclosing ...

  4. .Net Core与Vue.js模块化前后端分离快速开发解决方案(NetModular)

    NetModular是什么? NetModular不仅仅是一个框架,它也是一整套的模块化与前后端分离的快速开发的解决方案,目标是致力于开箱即用,让开发人员完全专注于业务开发,不需要关心底层封装和实现. ...

  5. 品Spring:真没想到,三十步才能完成一个bean实例的创建

    在容器启动快完成时,会把所有的单例bean进行实例化,也可以叫做预先实例化. 这样做的好处之一是,可以及早地发现问题,及早的抛出异常,及早地解决掉. 本文就来看下整个的实例化过程.其实还是比较繁琐的. ...

  6. Springboot之初入江湖

    Hello,各位小伙伴大家好,我是小栈君. 今天的分享主题是关于Springboot主题分享,其实在写这个系列主题之前有想过一些关于分享技术的顺序问题,因为我在创建"IT干货栈"这 ...

  7. 一款功能强大的TCP/UDP工具---flynet

    前言 前段时间做某个项目,由于涉及到tcp/udp方面的知识比较多,于是就索性趁热打铁,写个工具来强化相关知识.另外由于并非十分擅长Golang,所以也顺便再了解下Golang吧. 简介 flynet ...

  8. 10个值得深思的_PHP_面试问题

    Q1 第一个问题关于弱类型 $str1 = 'yabadabadoo'; $str2 = 'yaba'; if (strpos($str1,$str2)) { echo "\"&q ...

  9. 自学导航页(待续ing)

    1 博客导航1.1 linuxlinux全线教程–提供了linux教程,服务器管理教程,BSD教程,还有编程语言(C/Java/Python/Perl),以及网络等全栈学习教程 1.2 存储技术NoS ...

  10. pycharm 安装第三方包步骤

    pycharm 安装第三方包步骤: 完成.