Spring学习笔记之二----基于XML的Spring AOP配置

时间:2022-09-20 15:59:58
  1. 在Spring配置文件中,通常使用<aop:config>元素来设置AOP,其中应包括:
    • <aop:aspect>指定aspect,aspect是一个POJO类,包含了很多的advice;advice是aspect中的方法,它包含了要应用在切面上的逻辑;
    • <aop:pointcut>指定pointcut,pointcut是一个表达式,用于指定在哪些对象或者类型上应用aspect的advice;
    • <aop:before>, <aop:after>,<aop:after-returning>, <aop:after-throwing>, or <aop:around>是<aop:aspect>的子元素,用于指定将aspect中的哪一个advice方法(通过method属性)应用到哪一个pointcut上(通过pointcut-ref属性);
  2. 如何通过一个静态字段创建一个bean:
    • 使用一个内置的FactoryBean:FieldRetrievingFactoryBean,并指定其staticField属性,属性值就是该静态字段的全路径;
    • 使用<util:constant>标记,其static-field用于指定静态字段的全路径;
  3. 如果通过一个对象属性来创建一个bean:
    • 使用一个内置的FactoryBean:PropertyPathFactoryBean,其targetObject属性用于指定属性所在的对象bean,propertyPath用于属性的全路径;
    • 使用<util:property-path>标记,其path属性指定beanName....propertyName;
  4. 有时候bean需要知道一些其在spring container中的原数据信息,这需要让bean的类型实现一些特定的接口:
    接口名 说明
    BeanNameAware  Bean name
    BeanFactoryAware 当前bean所在的Bean Factory,通过它你能调用container的一些service
    ApplicationContextAware 当前bean所在的Application Context,通过它你能调用container的一些service
    MessageSourceAware  得到当前Appliaction Context中的Message Source,通过它你能得到Message
    ApplicationEventPublisherAware  得到当前Appliaction Context中的Application Event Publisher,通过它你能publish Application Events 
    ResourceLoaderAware   得到当前Appliaction Context中的Resource Loader,通过它你能load External Resources

    这些接口中的Setter方法将在bean属性被设置之后,在初始化方法被调用之前被Spring Container自动调用:

    • 通过构造函数或者工厂方法创建bean实例;
    • 设置bean的属性值;
    • 调用这些接口的Setter方法;
    • 将bean实例传递给BeanPostProcessor实现类的postProcessBeforeInitialization方法;
    • 调用bean的初始化方法;
    • 将bean实例传递给BeanPostProcessor实现类的postProcessAfterInitialization方法;
    • 使用bean;
    • 当container被关闭时;调用析构器方法;
  5. 在Spring中,各个bean之间可以通过Event来进行交流,通常使用以下3个步骤来完成:
    • 申明Event的类型,所有的Event都必须继承自ApplicationEvent类;
    • 发布Event的bean必须要实现ApplicationEventPublisher接口,如果要publish event时,请调用publishEvent()方法;
    • 侦听Event的bean都必须要实现ApplicationListener接口,并实现onAppicationEvent方法;如果Listener只想侦听特殊的Event,可以实现ApplicationListener接口的范型形式;

    application context它自己也在发布container events,例如ContextClosedEvent,ContextRefreshedEvent,RequestHandledEvent。

  6. Property Editor主要用于实现字符串与属性类型值之间的相互转换,Spring提供了很多内置的PropertyEditors,在使用这些之前,应首先注册它们;
    Spring提供了CustomNumberEditor, ClassEditor, FileEditor, LocaleEditor, StringArrayPropertyEditor, and URLEditor;其中ClassEditor, FileEditor, LocaleEditor, and URLEditor已经被预注册了;而其他的则需要注册到一个类型为CustomEditorConfigurer的bean里面;
    你也可以创建自定义的PropertyEditor,通过实现java.beans.PropertyEditor接口或者继承java.beans.PropertyEditorSupport类;在PropertyEditorSupport类中,getAsText()用于将property转换为一个字符串值,setAsText()用于将字符串值转换为一个属性值,获取或设置属性值可以通过调用getValue()和setValue()方法;
    一个PropertyEditor只能针对一种类型,当它被放置到与这个类型相同的包中,并且类名是这个类型名+Editor,则Spring Container会自动搜索它,并不需要注册到CustomEditorConfigurer中。
  7. bean的定义可以被继承,被继承的bean称之为父bean,继承的bean称之为子bean;子bean继承父bean的bean定义,但不是全部;比如autowire属性就不能被继承;
    子Bean可以复写父bean的定义,如果在父bean中定义了class属性,并且子bean的类型和父bean的类型一样,则子bean不需要定义class属性;
    父bean可以是抽象的,只需设置abstract="true",Spring Container则不会初始化这个bean;
    父bean可以不用定义类型;
    如果子bean和父bean都有一个集合类型的属性,子bean可以自定义集合类型属性中的item,并添加继承的父bean集合类型属性里面所有item,只需在元素上面设置merge="true"
  8. 我们可以使用SpEL去配置Spring

Spring学习笔记之二----基于XML的Spring AOP配置的更多相关文章

  1. 7 -- Spring的基本用法 -- 11&period;&period;&period; 基于XML Schema的简化配置方式

    7.11 基于XML Schema的简化配置方式 Spring允许使用基于XML Schema的配置方式来简化Spring配置文件. 7.11.1 使用p:命名空间简化配置 p:命名空间不需要特定的S ...

  2. Spring学习笔记(二)Spring基础AOP、IOC

    Spring AOP 1. 代理模式 1.1. 静态代理 程序中经常需要为某些动作或事件作下记录,以便在事后检测或作为排错的依据,先看一个简单的例子: import java.util.logging ...

  3. Spring 学习笔记(二)

      一.Spring 中的bean配置 –配置形式:基于 XML 文件的方式:基于注解的方式 –Bean 的配置方式:通过全类名(反射).通过工厂方法(静态工厂方法 & 实例工厂方法).Fac ...

  4. spring学习笔记(二)

    Spring的Bean管理:(注解方式) Spring的AOP:XML方式 Spring的AOP:注解方式 1.Spring的Bean管理的中常用的注解: * @Controller   :WEB层 ...

  5. struts2视频学习笔记 22-23(基于XML配置方式实现对action的所有方法及部分方法进行校验)

    课时22 基于XML配置方式实现对action的所有方法进行校验   使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类 ...

  6. Java框架spring 学习笔记(十四):注解aop操作

    回见Java框架spring Boot学习笔记(十三):aop实例操作,这里介绍注解aop操作 首先编写一个切入点HelloWorld.java package com.example.spring; ...

  7. Spring学习笔记&lpar;三&rpar;:面向切面的Spring

    Spring之面向切面编程 一.理解何为面向切面编程 对于这个的理解,我觉得Spring实战中的例子讲得很明白: 假设我现在是一个小区用户,每个月小区都要收电费,这时候就会来人查看电表,算出来这个月电 ...

  8. Spring 学习教程(二): IOC&sol;DI&plus;AOP

    1. IOC / DI Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员 ...

  9. Spring学习手札(二)面向切面编程AOP

    AOP理解 Aspect Oriented Program面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. 但是,这种说法有些片面,因为在软件工程中,AOP的价值体现的并 ...

随机推荐

  1. enum使用总结

    enum的一般使用方法是它会占用最大的成员长度 然后我忘记的是enum还可以这样使用 enum ExctState { START, SUCCEED, FAILURE=6, REJECT, }; 这样 ...

  2. jquery的延迟加载插件Lazy Load Plugin for jQuery

    下载:https://github.com/tuupola/jquery_lazyload 使用:http://www.appelsiini.net/projects/lazyload 翻译:http ...

  3. PHPnow 升级后 PHP不支持GD、MySQL

    来自http://tunps.com/php-unsupport-gd-and-mysql-after-upgrade-phpnow 最近磁盘格式化误操作后,最近两天都在忙于数据恢复,现在才恢复正常. ...

  4. 求最小生成树&lpar;Prim算法)&lpar;1075&rpar;

    Description 求出给定无向带权图的最小生成树.图的定点为字符型,权值为不超过100的整形.在提示中已经给出了部分代码,你只需要完善Prim算法即可. Input 第一行为图的顶点个数n    ...

  5. Robot Framework - 4 - 创建和扩展测试库的示例

    创建和扩展Library的示例 示例:Check status on Linux OS 创建与使用library的基本步骤:           1--- library实现的内容和实现的方式     ...

  6. 机器学习技法笔记:15 Matrix Factorization

    Roadmap Linear Network Hypothesis Basic Matrix Factorization Stochastic Gradient Descent Summary of ...

  7. oracle 基本操作--事务

    事务:可以看做是由对数据可的若干操作组成的一个单元,浙西操作要么都完成,要么都取消,从而保证数据满足一致性的要求. 事务的组成: 一条或者多条DML 一条DDL 一条DCL DML语句需要使用comm ...

  8. JNI探秘-----你不知道的FileInputStream的秘密

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 设计模式系列结束,迎来了LZ ...

  9. Django入门与实践-第12章:复用模板(完结)

    http://127.0.0.1:8000/http://127.0.0.1:8000/boards/1/http://127.0.0.1:8000/boards/2/http://127.0.0.1 ...

  10. 基于ef core 2&period;0的数据库增删改审计系统

    1.首先是建审计存储表 CREATE TABLE [dbo].[Audit] ( [Id] [uniqueidentifier] NOT NULL, [EntityName] [nvarchar](1 ...