当前位置: 首页 > news >正文

制作网站公司网站关键词快速排名优化

制作网站公司,网站关键词快速排名优化,广州建设网站技术,wordpress 管理员插件目录 引言 设计思路: 代码实现: 标注注解:@StrategyClass 扫描注解:trategyScan 注册器抽象类: 动态策略注册类: AOP类: 总结: 引言 曾经有人问我,假如有一个业务或者数据处理逻辑,会根据甲方客户繁杂的业务需求,而动态变化,该怎么处理,具体怎么实现? 将…

目录

引言

设计思路:

代码实现:

标注注解:@StrategyClass

扫描注解:trategyScan

注册器抽象类:

动态策略注册类:

AOP类:

总结:


引言

        曾经有人问我,假如有一个业务或者数据处理逻辑,会根据甲方客户繁杂的业务需求,而动态变化,该怎么处理,具体怎么实现?

        将所有策略strategy都写出来,然后放入一个hashMap,根据不同的业务需求,调用不同的策略就行了。

        再问:那如果我的策略动态多变,再将strategy放入Map的代码,不想写死,不想频繁的修改代码怎么实现?比如我将策略代码写入项目下某个文件夹下面某个文件里,或者直接存入数据库某张表里,策略代码用text类型字段存起来,再调用构建接口,将策略逻辑用类加载器,加载出来,动态的创建为一个个新的strategy对象呢?

        读取文件或者text字段,并解析为java代码,编译后,用类加载的方式加载,并且注册进Map,这个稍微复杂,但是我可以实现,只用在代码中添加策略,但是不用修改注册逻辑代码的方式。

设计思路:

  1. 所有需要被自动添加的策略类 Strategy 都必须加注解

  2. 再做一个扫描注解,属性包含:标明需要被扫描的包路径,@Import 标注一个注册器(实现ImportBeanDefinitionRegistrar),

  3. 定义一个注册器,实现ImportBeanDefinitionRegistrar,该注册器可以根据上述注解找到所有被注解标注的类,然后获取到标注的名称,实例化该类,并注册入指定的缓存。

        将此注解加注在springboot启动类上面就可以在项目启动的时候,按照指定的包路径去扫描指定注解的类,然后利用反射机制,获取到扫描到的(被标注注解的)类的元空间,有了元空间,不管是获取该类上的注解,注解属性,还是该类的属性,方法都是没问题的。那么就可以获取到被扫描到的策略strategy的名字,再利用反射 clazz.newInstance()  创建出实例,放入缓存,就解决了动态注册策略的目的了。

    除了对反射的利用,还需要对spring 容器有一定的理解,才能利用spring容器的environment, resourceLoader ,做出扫描器,使用resourceLoader 扫描该环境下,所有带注解的类;再根据指定的注解,过滤出目标类。

代码实现:

标注注解:@StrategyClass

import io.swagger.v3.oas.annotations.tags.Tag;
import java.lang.annotation.*;/*** @Title: StrategyClass* @Description: 用来标记需要被注册的strategy* @Author: wenrong* @Date: 2024/4/2 10:02* @Version:1.0*/@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface StrategyClass {/*** 策略名* 为空时,会尝试读取 {@link Tag#name()} 属性*/String strategyName() default "";}

扫描注解:trategyScan

@DynamicStrategyScan注解标记在springboot启动类上,在springboot启动的时候,就会扫描@StrategyClass 注解的策略类,并开始自动添加到Map 缓存。

import org.springframework.context.annotation.Import;
import java.lang.annotation.*;/*** @Title: DynamicStrategyScan* @Description: 用来扫描有动态策略注解的类,并初始化成相应的配置,注册到JVM 缓存* @Author: wenrong* @Date: 2024/4/2 15:27* @Version:1.0*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Import(DynamicStrategyRegister.class)
@Documented
public @interface DynamicStrategyScan {String[] value() default {};String[] basePackages() default {};
}

注册器抽象类:

因为可能不光策略需要被注册,其他的也可能需要被注册,所以这里这里做一下抽象:

import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.ResourceLoaderAware;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.env.Environment;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;import java.lang.annotation.Annotation;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;/*** @Title: AnnotationScanAndRegister* @Description:* @Author: wenrong* @Date: 2024/4/2 15:35* @Version:1.0*/
public abstract class AnnotationScanAndRegister implements ImportBeanDefinitionRegistrar, ResourceLoaderAware, EnvironmentAware {/*** 资源加载器*/protected ResourceLoader resourceLoader;/*** 环境*/protected Environment environment;@Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {ImportBeanDefinitionRegistrar.super.registerBeanDefinitions(importingClassMetadata, registry);}/*** author: wenrong* date: 2024/4/2 15:36* 获取base packages*/protected static Set<String> getBasePackages(AnnotationMetadata importingClassMetadata, Class<? extends Annotation>
http://www.qdjiajiao.com/news/1485.html

相关文章:

  • 山西建设工程协会网站百度网盘网页版登录入口
  • 怎么做好网站营销谷歌推广外包
  • 爱射影院网站建设中长春做网站公司长春seo公司
  • 衢州做网站 thinknew昆明seo排名外包
  • 网站建设机器人重庆企业seo
  • 软件用户界面设计上海seo公司哪家好
  • 组服务器做网站博客可以做seo吗
  • 做网站通栏模糊软文代发布
  • 网站开发ckplayer加载失败引流推广效果好的app
  • 高效网站推广公司图片外链
  • 网站的论坛怎么做网络营销的方法有哪些?
  • 北京大兴最专业的网站建设公司短信营销
  • 做一个网站大概要多少钱网络营销站点推广的方法
  • 如何知道网站有没有备案上海关键词优化推荐
  • 手机h5案例 网站百度竞价怎么做
  • 国外有做塑料粒子的网站吗seo查询网站是什么
  • 广西网站推广青岛网站建设
  • 青岛 网站制作公司厦门seo计费
  • 广西网站建设工具市场营销在线课程
  • 什么网站做执法仪seo短视频网页入口引流网站
  • 想看别人的wordpress博客网站网店怎么运营和推广
  • 建e网3d模型免费下载百度首页排名优化多少钱
  • 企业网站建站流程定制网站建设电话
  • 深圳招男做鸭网站百度地图排名怎么优化
  • 禅城网站建设报价百度指数的主要功能有
  • 柳州网站开发百度推广一般多少钱
  • 自己做头像的网站网店运营与推广
  • html企业网站系统网络做推广公司
  • 兼职做任务的网站建站系统源码
  • 如何自己做资源类网站产品关键词大全