Spring_在XML中通过切面引入新的功能

没有不会做的事,只有不想做的事。

  在Java配置中我们借助AspectJde @DeclareParents注解为被通知的方法引入新的方法,在XML中我们可以使用Spring aop命名空间的

<aop:declare-parents>元素。

  

<?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"
    xmlns:c="http://www.springframework.org/schema/c"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc         http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
        http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.3.xsd
        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-4.3.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
        <bean id="audience" class="chapter4.practice1.Audience"/>
        <aop:config>
            <!-- 声明切面 -->
            <aop:aspect ref="audience">
                <!-- 定义切点 -->
                <aop:pointcut expression="executionexecution(** chapter4.practice1.Performance.perform(..))"           id="performance"/>
                <!-- 定义前置通知 -->
                <aop:before pointcut-ref="performance" method="perform"/>
                <!-- 定义返回通知 -->
                <aop:after-returning pointcut-ref="performance" method="performReturn"/>
                <!-- 定义异常通知 -->
                <aop:after-throwing pointcut-ref="performance" method="performThrowing"/>
                <!-- 定义环绕通知 -->
                <aop:around pointcut-ref="performance" method="aroundPerformance"/>
                <!-- 定义一个存在参数的切点,为通知传参数 -->
                <aop:pointcut expression="executionexecution(** chapter4.practice1.Performance.play(String)) and           args(gameName)" id="game"/>
                <!-- 为audience引入新的功能 -->
                <aop:declare-parents types-matching="chapter4.practice1.Audience+"           implement-interface="chapter4.practice2.EnableFly" default-impl="chapter4.practice2.EnableFlyIntroducer"/>
            </aop:aspect>
        </aop:config>

</beans>

  <aop:declare-parents>元素声明了切面所统治的bean要在它的对象层次结构中拥有新的父类型,即类型匹配types-matching属性的那些bean在父类的结构中会增加implement-interface属性指定的接口,而default-impl指定了默认实现该接口的类或通过delegate-ref属性指定具体实现的bean ID。

原文地址:https://www.cnblogs.com/dandelZH/p/8964739.html

时间: 2024-11-08 22:19:00

Spring_在XML中通过切面引入新的功能的相关文章

Spring_在XML中声明切面

人,最大的敌人是自己. AOP配置元素 在Spring的aop命名空间中,提供多个元素用来在XML中声明切面. 1)<aop:advisor>:定义AOP通知器 2)<aop:after>:定义AOP后置通知(不管被通知的方法是否执行成功) 3)<aop:after-returning>:定义AOP返回通知 4)<aop:after-throwing>:定义AOP异常通知 5)<aop:around>:定义AOP环绕通知 6)<aop:as

Spring AOP 在XML中声明切面

转载地址:http://www.jianshu.com/p/43a0bc21805f 在XML中将一个Java类配置成一个切面: AOP元素 用途 <aop:advisor> 定义AOP通知器 <aop:after> 定义一个后置通知(不管目标方法是否执行成功) <aop:after-returning> 定义AOP返回通知 <aop:after-throwing> 定义AOP异常通知 <aop:around> 定义环绕通知 <aop:as

Spring 在XML中声明切面/AOP

在Spring的AOP配置命名空间中,我们能够找到声明式切面选择.看以下: <aop:config> <!-- AOP定义開始 --> <aop:pointcut/> <!-- 定义切入点 --> <aop:advisor/> <!-- 定义AOP通知器 --> <aop:aspect> <!-- 定义切面開始 --> <aop:pointcut/> <!-- 定义切入点 --> <

【Spring实战】—— 11 通过AOP为特定的类引入新的功能

如果有这样一个需求,为一个已知的API添加一个新的功能. 由于是已知的API,我们不能修改其类,只能通过外部包装.但是如果通过之前的AOP前置或后置通知,又不太合理,最简单的办法就是实现某个我们自定义的接口,这个接口包含了想要添加的方法. 但是JAVA不是一门动态的语言,无法再编译后动态添加新的功能,这个时候就可以使用 aop:declare-parents 来做了. 如果是可以改写的类,直接实现自定义的接口就行了,下面看看AOP是如何做的! 最开始使用的类和接口: package com.sp

Spring之AOP在XML中的配置方法

AOP 即 Aspect Oriental Program 面向切面编程 先来一个栗子: <aop:config> <aop:pointcut id="loggerCutpoint" expression= "execution(* com.how2java.service.ProductService.*(..)) "/> <aop:aspect id="logAspect" ref="loggerAsp

xml中${}的使用含义(美元符号大括号,以Spring、ibatis、mybatis为例)

项目中,经常会在xml中看到这样的写法: <properties resource="properties/database.properties"/> <dataSource type="SIMPLE"> <property value="${driver}" name="JDBC.Driver"/> <property value="${url}" name=&

[译] OpenStack Liberty 版本中的53个新变化

一个新的秋季,一个新的OpenStack 版本.OpenStack 的第12个版本,Liberty,在10月15日如期交付,而且目前发行版本已经备好了.那么我们期望能从过去六个月时间的开发中获得些什么呢?  正如过去几年一样,每个版本都有大量的变化和引入新的功能,但是现在,OpenStack 已经达到一个新的位置,那就是大部分的必要功能都已经齐备了,因此,现在更多的是增量式的变化-只有一些偶然性爆发的领域是例外,比如容器.  当然,这不是说容器就是过去六个月内的所有值得期待的东西.除了容器,还有

Spring_使用注解引入新功能

人行犹可复,岁月难可追. Java并不是动态语言,类编译完成后,很难在为该类添加新的功能,但是利用被称为引入的AOP概念,我们可以利用切面为Spring Bean添加新的方法. 使用@DeclareParents注解,将接口引入到Spring Bean中. @DeclareParents注解由三部分组成: 1)value属性指定了哪种类型的bean要引入该接口.加号(+)表示是该类型的所有子类型,而不是该类型本身. 2)defaultImpl属性指定了为引入功能提供实现的类. 3)@Declar

pom.xml中引入依赖(eclipse)

一.在pom.xml中添加依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> 后并不算完........ 二.需要再更新工程才能自动下载.引入mysql-connector-java.jar包 使用Maven管理工程,需要在工程上右键,选择Maven,选择update project s