Kafka进阶篇知识点
Kafka高级篇知识点
44个Kafka知识点(基础+进阶+高级)解析如下
由于篇幅有限,小编已将上面介绍的**《Kafka源码解析与实战》、Kafka面试专题解析、复习学习必备44个Kafka知识点(基础+进阶+高级)都整理成册,全部都是PDF文档**
}
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、控制台输出
切点:事务控制/日志输出
查话费方法…
切点:事务控制/日志输出
切点:事务控制/日志输出
缴话费方法…
切点:事务控制/日志输出
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 使用它调用父类的方法
最后
由于篇幅限制,小编在此截出几张知识讲解的图解
5589181406)]
[外链图片转存中…(img-8qHTiPQI-1715589181406)]
[外链图片转存中…(img-AJEbErIe-1715589181407)]
[外链图片转存中…(img-ePBQgGQU-1715589181407)]
[外链图片转存中…(img-q68w59dA-1715589181408)]