美文网首页JavaMVC框架
AOP_通过切面引入新功能(通过切面为方法添加实现接口

AOP_通过切面引入新功能(通过切面为方法添加实现接口

作者: Belmode | 来源:发表于2019-06-15 22:58 被阅读0次

在有些情况下某个类并不能显式的添加实现类,比如我们只有class文件,此时我们需要为这个类添加一个接口,就可以使用aop的切面来配置。

一、XML配置

1.目标类

package cn.xt.aop;
 
public class ExtraClass {
 
}

2.需要实现的接口

package cn.xt.aop;
 
public interface INewProduct {
    public void extra();
}

3.接口的某个实现类

package cn.xt.aop;
 
public class NewProductImpl implements INewProduct{
    @Override
    public void extra() {
        System.out.println("这是为通知类扩展的方法.....");
    }
 
}

4.xml配置

<!-- 需要扩展的类 -->
    <bean class="cn.xt.aop.ExtraClass" id="extraClass"></bean>
    <!-- 扩展需要的实现类 -->
    <bean class="cn.xt.aop.NewProductImpl" id="newProductImpl"></bean>
 
<aop:config>
        <aop:aspect><!-- 通过切面为类引入新功能(添加默认实现的接口和实现类) -->
            <aop:declare-parents 
                types-matching="cn.xt.aop.ExtraClass" 
                implement-interface="cn.xt.aop.INewProduct"
                delegate-ref="newProductImpl" />
        </aop:aspect>
    </aop:config>

delegate-ref属性代表引用spring容器中的bean来作为默认实现类,另外可以用default-impl="实现类的全限定名"实现一样的效果

5.测试

//通过切面配置以后,ExtraClass并没有显式实现INewProduct接口,依然可以调用接口方法
        INewProduct ec = (INewProduct) ctx.getBean("extraClass",ExtraClass.class);
        ec.extra();

二、注解配置

1.声明一个切面

@Aspect
public class ExtraAspect {
    @DeclareParents(
        value="cn.xt.aop.annotation.ExtraClass"
        ,
        defaultImpl=NewProductImpl.class
    )
    public static INewProduct newProject;
}

2.将切面声明为spring的一个bean

<bean class="cn.xt.aop.annotation.ExtraAspect" />

3.将扩展的实体声明为spring的一个bean

<!-- 需要扩展的类 -->
    <bean class="cn.xt.aop.annotation.ExtraClass" id="extraClass"></bean>

4.测试

INewProduct ec = (INewProduct) ctx.getBean("extraClass",ExtraClass.class);
        ec.extra();

相关文章

  • AOP_通过切面引入新功能(通过切面为方法添加实现接口

    在有些情况下某个类并不能显式的添加实现类,比如我们只有class文件,此时我们需要为这个类添加一个接口,就可以使用...

  • Springboot2.x 面向 Aop切面编程

    引入aop依赖 通过切面变成实现 所有controoler 请求日志记录

  • Spring aop例子

    引入jar包 公共接口 目标类 切面 Spring配置文件 测试方法

  • aop之@Around

    1、切面类加上注解 2、给需要增强的方法添加切面方式一:在切面类中使用execution给批量方法添加切面 注:e...

  • 【Spring实战】面向切面编程

    本章内容: 面向切面编程的基本原理 通过POJO创建切面 使用@AspectJ注解 为AspectJ切面注入依赖 ...

  • 复习总结2 切面编程 & 二进制优化

    Aspect切面编程 定义 切面编程:以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加...

  • 通过aop切面获取接口日志

    前言:我们项目中可能有这种需求,每个人请求了哪些接口?做了什么事情?参数是什么?重要的接口我们需要记录操作日志以便...

  • HAP_接口监控(注解)

    方法一:注解: 新建注解接口: 新建切面类监听注解接口: 给方法添加新建的注解: 测试: 方法二:(非注解)对IS...

  • Aop切面编程

    1 什么是切面编程2 KVO就是一个切面编程的例子3 借鉴KVO切面编程,用自己的方法实现4 代码实现 切面编程概...

  • Spring Aop - 初识

    常见名词解释通知、增强处理(Advice) : 代表你通过切面想要给目标方法添加的功能。常见的如:日志功能,方法用...

网友评论

    本文标题:AOP_通过切面引入新功能(通过切面为方法添加实现接口

    本文链接:https://www.haomeiwen.com/subject/zeopuftx.html