Spring————动态代理、AOP

本文介绍了Java Spring中的动态代理概念,包括为何使用动态代理以减少重复代码,以及如何通过JDK的Proxy类实现接口动态代理。此外,文章详细讲解了AOP(面向切面编程)的基本原理,如连接点、切入点、通知、织入等概念,并通过XML配置和注解方式展示了AOP的入门案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态代理:

 一、什么是动态代理:

举个栗子,生活中一般在打官司的时候都会请代理律师,为什么要请律师呢?是因为开庭的时候大部人对于打官司没有经验,只会说出自己案件的陈述,并不会根据法律等争取自己权益的最大化,此时就可以请律师帮助自己不仅完成对案件的陈述,还能争取权益最大化。那么Java中也是一样,如果要对功能进行增强就可以使用动态代理

二、为什么使用动态代理?

请看如下例子:一个演员cxk的本质工作是唱歌,跳舞等,但是演出前后为了吸引粉丝和大量的关注就需要进行各种业务的增强,如:联系业务、互联网造势、演出前的宣传、结算费用并纳税等一系列的操作。所以就用到了动态代理,我们可以把这个代理看成是经纪公司。

这样操作发现出现了大量重复的代码,如果有十个、一百个演员需要同样的处理那么代码需要重复十次、一百次。当然我们可以把这些功能封装成一个增强方法,然后在功能方法中进行调用,但是也出现了方法的十处、一百处的调用操作,一旦增强方法名字改变,就需要完成所有调用处代码的修改。或者有一天不需要这些增强操作了,就再次需要在这十处、一百处删除方法调用。所以这种操作不适用于大型的项目开发的需求,此时我们就必须使用Java的动态代理机制。

动态代理不需要修改源代码的基础上对原有类的功能进行增强。

在Java开发中如果一个类中的方法在基本功能之外需要进行功能扩充或者功能增强,如:事务控制、权限判断、日志记录等等操作,此时可以使用动态代理机制。

Java的JDK中Proxy类可以实现基于接口的动态代理,实现步骤示例如下:

三、如何使用动态代理:

  1. 因为Proxy类必须基于接口进行动态代理,所以首先创建接口,定义接口的规范,即功能方法的定义。

   2.定义实现接口的子类,实现接口定义的方法,此方法只需要把核心功能实现即可,其他增强的操作可以在代理类中实现。

3.定义代理类,在代理类中对被代理对象进行方法增强

即:定义经纪公司,在cxk的演出中被经纪公司进行增强。

package com.shi.advice;

import com.shi.service.Actor;
import com.shi.service.impl.CXK;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JJGS {
    public static void main(String[] args) {
        //1.创建代理类的对象----具体的人物cxk
        Actor cxk=new C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值