[Spring]Spring学习笔记(二)

Spring的bean管理(注解)

注解介绍

  1. 代码里面特殊标记,使用注解可以完成功能
  2. 注解写法 @注解名称(属性名称=属性值)
  3. 注解使用在类上面,方法上面 和 属性上面

Spring注解开发准备工作

  1. 导入jar包
    1. 导入基本的jar包
    2. 导入aop的jar包
  2. 创建类,创建方法
  3. 创建Spring配置文件,引入约束
    1. ioc基本功能,引入约束
    2. 做Spring的ioc注解开发,引入新的约束

注解创建对象

配置文件中,开启注解扫描

到包里面扫描类、方法、属性上面是否有注解

<context:component-scan base-package=”包名”></context:component-scan>

只扫描属性上面的注解

<context:annotation-config></context-annotation-config>

注解注入属性

  1. 在创建对象的类上面使用注解实现
  2. 创建对象有4个注解
    注:功能一样

    • @Component
    • @Controller
    • @Service
    • @Repository
  3. 创建对象是 单实例 还是多实例
    @Scope(value=”prototype/singleton”)

注解注入属性

  1. 创建service类,创建dao类

    通过类名寻找对应的对象进来,自动注入/装配。

    注入属性的两个对象

    @Autowired  自动装配

    @Resource(name)   注入指定对象,name为对象名

    配置文件和注解混合使用

    创建对象操作使用配置文件方式实现,然后注入属性的操作使用注解方式实现。

AOP概念

AOP百度百科

  1. AOP:面向切面(方向)编程,扩展功能不修改源代码实现
  2. AOP采取横向抽取机制,取代了传统纵向集成体系重复性代码(性能监视、事务管理、安全检查、缓存)

AOP原理:

  1. 原理图
    横向机制:
    无接口情况:
    使用动态代理实现。

AOP术语

  • Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点.
    类里面哪些方法可以被增强,这些方法被称为连接点。
  • Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.
    在类里面可以有很多的方法被增强,比如实际操作中,只是增强了类里面add方法和update方法,实际增强的方法被称为切入点
  • Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
    增强的逻辑,称为增强,比如扩展日志功能,这个日志功能称为增强
    前置通知:在方法之前执行
    后置通知:在方法之后执行
    异常通知:方法出现异常
    最终通知:在后置之后执行
    环绕通知:在方法之前和之后执行
  • Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field.(一般不用)
    用动态的方式向类中加属性/方法
  • Target(目标对象):代理的目标对象(要增强的类)
  • Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程.spring采用动态代理织入,而AspectJ采用编译期织入和类装在期织入。
    是把advice应用到target的过程
  • Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类
  • Aspect(切面): 是切入点和通知(引介)的结合
    把增强应用到具体方法上面,把增强用到切入点的过程。

Spring的aop操作

  1. 在Spring里面进aop操作,使用aspectJ实现
    1. aspectj不是spring的一部分,和spring一起使用进行aop操作
    2. Spring2.0以后增加了对aspectj的支持
  2. 使用aspectj实现aop有两种方式
    1. 基于aspectj的xml配置
    2. 基于aspectj的注解方式

AOP操作准备

  1. 除了导入基本的jar包外,还需要导入aop相关的jar包。
  2. 创建spring核心配置文件,导入aop的约束

来源:https://docs.spring.io/spring/docs/4.2.x/spring-framework-reference/html/xsd-configuration.html

使用表达式配置切入点

  1. 切入点,实际增强的方法
  2. 常用的表达式
    规则:execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>)

    1. execution(* cn.itcast.aop.Book.add(..))    某个方法
    2. execution(* cn.itcast.aop.Book.*(..))     某个类中的所有方法
    3. execution(* *.*(..))  //所有类中的所有方法
    4. 匹配所有save开头的方法execution(* save*(..))

Aspectj的aop操作

 

环绕:

Log4j介绍

  1. 通过log4j可以看到程序运行过程中更详细的信息
    1. 经常使用log4j查看日志
  2. 使用
    1. 导入log4j的jar包
    2. 赋值log4j的配置文件,复制到src下面
      Log4j.properties
  3. 设置日志级别
    1. info看到基本信息
    2. debug 看到详细信息

Spring整合web项目演示

  1. 演示问题
    每次访问action时,都会加载spring配置文件
    action调用service,service调用dao
  2. 解决方案
    1. 在服务器启动的时候,创建对象加载配置文件。
    2. 底层使用监听器,servletcontext对象
  3. 在spring里面不需要我们自己写代码实现,帮忙封装
    1. 封装了一个监听器,只需要配置监听器就可以了
    2. 需先导入整合web项目的jar包,spring-web
    3. 指定加载spring配置文件位置