最全【Spring教程】详解AOP的实现原理(动态代理)(1),java面试linux面试题

Kafka进阶篇知识点

image

Kafka高级篇知识点

image

44个Kafka知识点(基础+进阶+高级)解析如下

image

由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

}

2、TelecomOperatorImpl是实现类

package com.controller;

import com.service.TelecomOperator;

public class TelecomOperatorImpl implements TelecomOperator {

//查询话费余额

@Override

public void queryPhoneBal(){

System.out.println(“查话费方法…”);

}

//缴话费

@Override

public void payPhoneBal(){

System.out.println(“缴话费方法…”);

}

}

3、TelecomOperatorProxy是服务代理类

package com.controller;

import com.service.TelecomOperator;

/**

  • 第三方代理商

*/

public class TelecomOperatorProxy implements TelecomOperator {

private TelecomOperatorImpl telecomOperator;

public TelecomOperatorProxy(TelecomOperatorImpl telecomOperator) {

this.telecomOperator = telecomOperator;

}

//查询话费余额

@Override

public void queryPhoneBal(){

System.out.println(“切点:事务控制/日志输出”);

telecomOperator.queryPhoneBal();

System.out.println(“切点:事务控制/日志输出”);

}

//缴话费

@Override

public void payPhoneBal(){

System.out.println(“切点:事务控制/日志输出”);

telecomOperator.payPhoneBal();

System.out.println(“切点:事务控制/日志输出”);

}

}

4、TelecomOperatorTest是测试类

package com.controller;

public class TelecomOperatorTest {

public static void main(String[] args) {

TelecomOperatorImpl telecomOperator = new TelecomOperatorImpl();

TelecomOperatorProxy proxy = new TelecomOperatorProxy(telecomOperator);

proxy.queryPhoneBal();

proxy.payPhoneBal();

}

}

5、控制台输出

切点:事务控制/日志输出

查话费方法…

切点:事务控制/日志输出

切点:事务控制/日志输出

缴话费方法…

切点:事务控制/日志输出

五、aop的实现原理(动态代理)


1、JDK动态代理

package com.controller;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

/**

  • JDK动态代理类

*/

public class TelecomOperatorJDKProxy implements InvocationHandler {

private Object target;

//返回代理对象

public Object newProxy(Object target) {

this.target = target;

return Proxy.newProxyInstance(target.getClass().getClassLoader(),

target.getClass().getInterfaces(), this);

}

/**

  • @param obj 目标对象代理类的实例

  • @param method 代理实例上调用父类方法的Method实例

  • @param args 代入到代理实例上方法参数值的数组

*/

@Override

public Object invoke(Object obj, Method method, Object[] args) throws Throwable{

Object result = null;

System.out.println(“切点:事务控制/日志输出”);

result=method.invoke(target,args);

System.out.println(“切点:事务控制/日志输出”);

return result;

}

}

package com.controller;

import com.service.TelecomOperator;

public class TelecomOperatorJDKTest {

public static void main(String[] args) {

TelecomOperatorJDKProxy proxy = new TelecomOperatorJDKProxy();

TelecomOperator telecomOperator = (TelecomOperator)proxy.newProxy(new TelecomOperatorImpl());

telecomOperator.queryPhoneBal();

}

}

控制台输出:

切点:事务控制/日志输出

查话费方法…

切点:事务控制/日志输出

2、Cglib动态代理

package com.controller;

import org.springframework.cglib.proxy.Enhancer;

import org.springframework.cglib.proxy.MethodInterceptor;

import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**

  • Cglib动态代理类

*/

public class TelecomOperatorCglibProxy implements MethodInterceptor {

private Object target;//代理的目标对象

//创建目标对象的代理对象

public Object newProxy(Object target) {

this.target = target;

Enhancer enhancer = new Enhancer();//该类用于生成代理对象

enhancer.setSuperclass(this.target.getClass());//设置父类

enhancer.setCallback(this);//回调方法,设置回调对象为本身

return enhancer.create();//创建代理对象

}

/**

  • @param obj 目标对象代理类的实例(增强过)

  • @param method 代理实例上调用父类方法的Method实例

  • @param args 代入到代理实例上方法参数值的数组

  • @param proxy 使用它调用父类的方法

最后

由于篇幅限制,小编在此截出几张知识讲解的图解

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

P8级大佬整理在Github上45K+star手册,吃透消化,面试跳槽不心慌

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

5589181406)]

[外链图片转存中…(img-8qHTiPQI-1715589181406)]

[外链图片转存中…(img-AJEbErIe-1715589181407)]

[外链图片转存中…(img-ePBQgGQU-1715589181407)]

[外链图片转存中…(img-q68w59dA-1715589181408)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值