课程链接:

1    解析

1.1  aop:declare-parents 标签简介

1.2  标签使用样式

2    代码演练

2.1  introductions标签应用

1    解析

1.1  aop:declare-parents 标签简介

允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现类来代表这些对象

不同于aop:before等其他标签,元素声明该元素用于声明所匹配的类型拥有一个新的parent(父类)。所以测试类getBean后可以强转

1.2  标签使用样式

 <aop:declare-parents types-matching=" com.imooc.aop.schema.advice.biz.*(..))"   <!--包-->implement-interface="com.imooc.aop.schema.advice.Fit"   <!--接口-->default-impl="com.imooc.aop.schema.advice.FitImpl"    <!-- 实现类-->  />  

2    代码演练

2.1  introductions标签应用

实体类:

package com.imooc.aop.schema.advice.biz;public class AspectBiz {public void biz(){System.out.println("MoocAspect biz");
//        throw new RuntimeException();
    }public void init(String bizName,int times){System.out.println("AspectBiz init:"+ bizName + " "+times);}
}

测试类:

package com.imooc.test.aop;import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;import com.imooc.aop.schema.advice.Fit;
import com.imooc.aop.schema.advice.biz.AspectBiz;
import com.imooc.test.base.UnitTestBase;@RunWith(BlockJUnit4ClassRunner.class)
public class TestAOPSchemaAdvice extends UnitTestBase {public TestAOPSchemaAdvice(){super("classpath:spring-aop-schema-advice.xml");}@Testpublic void testBiz(){AspectBiz aBiz = super.getbean("AspectBiz");aBiz.biz();}@Testpublic void testInit(){AspectBiz aBiz = super.getbean("AspectBiz");aBiz.init("moocService",3);}    @Test/*** 配合spring-aop-schema-advice.xml 使用,调的是接口类,但是实际使用的是实现类*/public void testFit(){Fit fit = (Fit)super.getbean("AspectBiz");fit.filter();}
}

配置文件:

<?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-4.0.xsd"><bean id = "moocAspect" class = "com.imooc.aop.schema.advice.MoocAspect"></bean>
<bean id = "AspectBiz" class = "com.imooc.aop.schema.advice.biz.AspectBiz"></bean><aop:config><aop:aspect  id="moocAspectAOP" ref="moocAspect">
<!--     声明切入点:从哪里开始执行 -->
<!--     执行com.imooc.aop.schema.advice.biz包下的所有Biz结尾的java类中的所有方法时 -->
<!--         <aop:pointcut expression="execution(* com.imooc.aop.schema.advice.biz.*Biz.*(..))" id="moocPointCut"/> -->
<!--         <aop:before method="before" pointcut-ref="moocPointCut"/> -->
<!--         <aop:after-returning method="afterreturning" pointcut-ref="moocPointCut"/> -->
<!--         <aop:after-throwing method="throwing" pointcut-ref="moocPointCut"/> -->
<!--         <aop:after method="after" pointcut-ref="moocPointCut"/> -->
<!--         <aop:around method="around" pointcut-ref="moocPointCut"/> --><!--         <aop:around method="aroundInit" pointcut="execution(* com.imooc.aop.schema.advice.biz.AspectBiz.init(String,int)) and args(bizName,times)"/> --><!--             type-matching 要匹配的是这个包下的所有方法,(后便注释是我自己解释的,看不懂可以不看,报错了可以仔细想一下)注意:type-matching 一定要匹配这个包下的所有类(包含我要执行的接口,实现类,以及super.getBean到的类) -->

 <aop:declare-parents types-matching=" com.imooc.aop.schema.advice.biz.*(..))"

            implement-interface="com.imooc.aop.schema.advice.Fit" 

            default-impl="com.imooc.aop.schema.advice.FitImpl"/>

 

        </aop:aspect>
</aop:config></beans>

接口:

package com.imooc.aop.schema.advice;public interface Fit {void filter();
}

实现类:

package com.imooc.aop.schema.advice;public class FitImpl implements Fit {@Overridepublic void filter() {System.out.println("FitImpl 执行中");}}

打印日志:

四月 20, 2019 9:50:09 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@6e1d4150: startup date [Sat Apr 20 09:50:09 CST 2019]; root of context hierarchy
四月 20, 2019 9:50:09 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-aop-schema-advice.xml]
FitImpl 执行中
四月 20, 2019 9:50:09 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@6e1d4150: startup date [Sat Apr 20 09:50:09 CST 2019]; root of context hierarchy

转载于:https://www.cnblogs.com/1446358788-qq/p/10740000.html

Spring课程 Spring入门篇 5-6 introductions应用相关推荐

  1. Spring课程 Spring入门篇 总结

    参考4.9 转载于:https://www.cnblogs.com/1446358788-qq/p/10668363.html

  2. 第一篇:Spring Boot 快速入门篇

    小技巧: Spring Boot 集成周边技术3部曲 1.pom文件引入maven依赖 2.配置文件中配置相关信息 3.启动类上加注解 一.Spring Boot 构建项目有2种方式: Maven 构 ...

  3. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  4. 视频教程-①Spring Cloud 第一季(初级入门篇)-Java

    ①Spring Cloud 第一季(初级入门篇) 2011年毕业后在澳门 遊澳集团(UO Group)旗下某IT科技公司从事 android,php,j2ee开发工作,负责 国际短信发送系统.银联支付 ...

  5. (转)构建微服务:Spring boot 入门篇

    转自: Spring Boot(一):入门篇 - 纯洁的微笑 - 博客园 : 什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 S ...

  6. (转)Spring boot(一):入门篇

    https://www.cnblogs.com/ityouknow/p/5662753.html#!comments 构建微服务:Spring boot 入门篇 什么是Spring Boot Spri ...

  7. Spring Boot(一)入门篇

    Spring Boot干货系列:(一)优雅的入门篇 前言 Spring一直是很火的一个开源框架,在过去的一段时间里,Spring Boot在社区中热度一直很高,所以决定花时间来了解和学习,为自己做技术 ...

  8. Spring cloud eureka 入门使用及指导说明(单机篇)

    Spring cloud eureka 入门使用及指导说明(单机篇) 基本概念和方案 Eureka是基于REST(Representational State Transfer,代表性状态传输)的服务 ...

  9. Spring Boot (16)---优雅的入门篇

    Spring Boot (16)---优雅的入门篇 Spring一直是很火的一个开源框架,在过去的一段时间里,Spring Boot在社区中热度一直很高,所以决定花时间来了解和学习,为自己做技术储备. ...

  10. Spring Boot 2.0 WebFlux 教程 (一) | 入门篇

    目录 一.什么是 Spring WebFlux 二.WebFlux 的优势&性能 三.WebFlux 应用场景 四.适用性 五.快速入门 5.1 添加 webflux 依赖 5.2 定义接口 ...

最新文章

  1. oracle 和sybase比较,oracle和sybase的一些区别
  2. 2021年春季学期-信号与系统-第十一次作业参考答案-第五小题
  3. Android MediaPlayer
  4. boost::geometry::svg用法的测试程序
  5. php 8 jit,PHP JIT 是什么?PHP8 新特征之 JIT 图文详解_后端开发
  6. Java程序创建Kafka Topic,以及数据生产消费,常用的命令
  7. pycharm ubuntu 安装_Nvidia Jetson Xavier 安装配置(ubuntu 18.04)
  8. 两种可以支持跨域的方式 - 讲解篇
  9. 【转】JMeter学习(二十八)内存溢出解决方法
  10. B+树 范围查询_为什么 MySQL 使用 B+ 树,而不是 B 树或者 Hash?
  11. 一句话木马:ASPX篇
  12. 无线接入中的移动技术
  13. 【转载】MiniUtilityFramework(九):CText和TEXT
  14. 阿里云Oss获取图片的大小信息
  15. 3D模型欣赏:银发美女 ,性感女骑士
  16. 网状神经系统的典型特点,网状结构神经系统
  17. 基于软总线的实时组件调度技术研究
  18. Excel解析与数据生成(撑持JXL,POI)
  19. 京东高效转链API接口—商品优惠券二合一转链—京东联盟优惠券如何转链?
  20. ntp协议客户端服务器模式,思科配置NTP客户端服务器模式

热门文章

  1. 物联网平台具体都有哪些特点
  2. OutLook添加网易邮箱,QQ邮箱
  3. CTF Blind pwn题型学习笔记
  4. 如何备份android10,安卓手机系统怎么备份
  5. 前端工作中的一些解决问题的方法,可以参考一下
  6. Android 应用商店分析
  7. 破解蛋白质结构秘密的AlphaFold
  8. 征服spring源码(一)
  9. 个人网站与个人博客的区别
  10. 不平凡的2021,末流普本生秋招上岸大厂的历程