课程链接:

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");
} @Test
public void testBiz(){
AspectBiz aBiz = super.getbean("AspectBiz");
aBiz.biz();
} @Test
public 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 {

    @Override
public 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

Spring课程 Spring入门篇 5-6 introductions应用的更多相关文章

  1. Spring Boot -01- 快速入门篇(图文教程)

    Spring Boot -01- 快速入门篇(图文教程) 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到[慕课网]手机 app ...

  2. Spring实践系列-入门篇(一)

    本文主要介绍了在本地搭建并运行一个Spring应用,演示了Spring依赖注入的特性 1 环境搭建 1.1 Maven依赖 目前只用到依赖注入的功能,故以下三个包已满足使用. <properti ...

  3. Spring课程 Spring入门篇 6-2 ProxyFactoryBean及相关内容(上)

    1 解析 1.1 类的方式实现各种通知需要实现的接口 1.2 创建Spring aop代理的优点及方法 1.3 代理控制切入点和通知的顺序的代码实现(具体完全实现,见代码2.1) 1.4 代理方式选择 ...

  4. Spring课程 Spring入门篇 7-3 advice扩展

    课程链接: 1 解析 1.1 advice中aspect 切面传参 1.2 通知参数名称——argNames属性, 参数为 JoinPoint.ProceedingJoinPoint.JoinPoin ...

  5. Spring课程 Spring入门篇 7-2 Advice定义及实例

    1 解析 1.1 通知:after和afterreturning的区别 1.2 @RunWith 是什么? 2 代码演练 2.1 注解方式配置通知的两种方式 2.2 异常通知 2.3 非异常通知 1 ...

  6. Spring课程 Spring入门篇 6-3 ProxyFactoryBean及相关内容(下)

    1 解析 1.1 使用global advisors demo 1.2 jdk代理和cglib代理的选择 1.3 如何强制使用CGLIB实现AOP? 1.4 JDK动态代理和CGLIB字节码生成的区别 ...

  7. Spring课程 Spring入门篇 5-2 配置切面aspect

    本节主要讲了在xml中配置切面的demo 1 解析 1.1 配置切面xml 1.2 配置切面xml 1.3 问:什么是动态代理? 2 代码演练 2.1 配置切面xml 1 解析 1.1 配置切面xml ...

  8. Spring课程 Spring入门篇 4-9 Spring bean装配之对jsr支持的说明

    1 解析 1.1 疑问:2.2去掉@resource注解,为什么不能赋值?不是有set方法了吗? 1.2 @resource注解版本支持 1.3 没有显式指定@resource的那么,默认名称从何获得 ...

  9. Spring课程 Spring入门篇 4-8 Spring bean装配之基于java的容器注解说明--基于泛型的自动装配

    1 解析 1.1 什么是泛型? 1.2 泛型有什么作用? 1.3 泛型装配样式? 2 代码演练 2.1 泛型应用 1 解析 1.1 什么是泛型? Java泛型设计原则:只要在编译时期没有出现警告,那么 ...

随机推荐

  1. sed用法——在指定行后面添加内容

    文档内容如下: # cat 123.txt linuxciscohuaweinetworksystem 1. 使用sed命令在cisco行下面添加CCIE: # sed -i "/cisco ...

  2. [ActionScript 3.0] 创建倒影

    package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Display ...

  3. 大象——Thinking in UML

    目录 大象--Thinking in UML 面向对象 普通民众的面向对象 大师眼中的面向对象 大象--Thinking in UML 大音希声,大象希形, 近来闲暇,随手翻起一些曾经看过的书籍,才发 ...

  4. JavaWeb学习笔记(二十二)—— 过滤器filter

    一.什么是过滤器 过滤器filter是JavaWeb三大组件之一,它与Servlet很相似!不过过滤器是用来拦截请求的,而不是处理请求的.WEB开发人员通过Filter技术,对web服务器管理的所有w ...

  5. Jmeter打开url时提示“请在微信客户端打开链接问题”

    前提: 1.HTTP信息头管理器已添加了“User-Agent” 2.工作台添加HTTP代理服务器(注意端口和客户端填写的代理端口要一致) 但是运行的时候总是提示“请在微信客户端打开链接” 查阅各种资 ...

  6. Go语言内置类型和函数

    内置类型 内置函数 Go 语言拥有一些不需要进行导入操作就可以使用的内置函数.它们有时可以针对不同的类型进行操作,例如:len.cap 和 append,或必须用于系统级的操作,例如:panic.因此 ...

  7. 常用sql记录

    一.修改字段默认值 alter table 表名 drop constraint 约束名字   ------说明:删除表的字段的原有约束 alter table 表名 add constraint 约 ...

  8. 4.nginx高可用

    1.大体结构 一.使用场景介绍: nginx做负载均衡,来达到分发请求的目的,但是不能很好的避免单点故障,假如nginx服务器挂点了,那么所有的服务也会跟着瘫痪 .keepalived+nginx,就 ...

  9. python学习 条件控制

    if - else  if 条件a : 内容a else : 内容 非a if - elif - else  if 条件a : 内容a elif 条件b: 内容b-a else : 内容 非(a∪b) ...

  10. C#的datatable使用

    // 构造datatable DataTable dt = new DataTable("test_table"); dt.Columns.AddRange(new DataCol ...