java框架怎么发现用户的自定义实现类

5 篇文章 0 订阅
2 篇文章 0 订阅
本文介绍了如何在Spring环境下,利用Sa-Token和TLog框架实现自定义接口的扩展。Sa-Token通过自动注入和静态变量判断,选择用户实现或默认实现的监听器。而TLog则通过配置文件声明自定义ID生成器并在初始化时加载。这两种方式为框架扩展提供了灵活性。
摘要由CSDN通过智能技术生成

这里说的是spring环境下的.比如提供给用户一个接口. 用户实现了这个接口就用用户的. 没有实现就用框架里自带的

第一种方式

首先参考的是sa-token框架中

/**
 * 自定义侦听器的实现
 */
@Component
@Slf4j
public class MySaTokenListener implements SaTokenListener {
}

点进去之后.发现有个set.见下图
在这里插入图片描述
这里建议下载框架源码再研究. 刚开始没有下载全.总是找不到入口


	/**
	 * 注入侦听器Bean
	 * 
	 * @param saTokenListener saTokenListener对象 
	 */
	@Autowired(required = false)
	public void setSaTokenListener(SaTokenListener saTokenListener) {
		SaManager.setSaTokenListener(saTokenListener);
	}

发现是个set注入;
点击去发现有个get


	/**
	 * 侦听器 Bean  
	 */
	private static SaTokenListener saTokenListener;
	public static void setSaTokenListener(SaTokenListener saTokenListener) {
		SaManager.saTokenListener = saTokenListener;
	}
	public static SaTokenListener getSaTokenListener() {
		if (saTokenListener == null) {
			synchronized (SaManager.class) {
				if (saTokenListener == null) {
					setSaTokenListener(new SaTokenListenerDefaultImpl());
				}
			}
		}
		return saTokenListener;
	}

所以是先自动注入, get时判断为空就自己new一个.
原来我一直想着自定义的和default的都是自动注入时进行区分的. 原来是有一个先后.

最后再把 SaBeanInject 这个类交给spring进行管理.
在这里插入图片描述
框架是通过spring.factories方式;

第二种方式

参考的是TLOG框架
要实现自定义的id
第一步,先继承父类

public class TestIdGenerator extends TLogIdGenerator {
    @Override
    public String generateTraceId() {
        return String.valueOf(System.nanoTime());
    }
}

第二步,在配置文件中声明

tlog.id-generator=com.yomahub.tlog.example.dubbo.id.TestIdGenerator

第三步在初始化bean时读取配置

   @Override
    public void afterPropertiesSet() throws Exception {
  
        if (StrUtil.isNotBlank(idGenerator)){
            try{
                TLogIdGenerator tLogIdGenerator = (TLogIdGenerator)TLogSpringAware.registerBean(Class.forName(idGenerator));
                TLogIdGeneratorLoader.setIdGenerator(tLogIdGenerator);
            }catch (Exception e){
                throw new RuntimeException("Id生成器包路径不正确");
            }
        }
    }

这样就可以拿到自定义实现

总结

两种方法都可以. 看自己的需求. 如果有其他方法欢迎留言告诉我.我很想知道.谢谢了

顺便贴上两个开源框架的链接:
sa-token:https://sa-token.dev33.cn/doc/index.html#/

tlog:https://tlog.yomahub.com/docs/custom_traceid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值