Youtu-2B蒸馏技术应用:能否进一步缩小模型体积

核心内容摘要

OpenClaw如何重塑AI代理为个人操作系统的?为什么值得每一个网络工程师关注?
人工智能之语言领域 自然语言处理 第二章 语言学基础

Win11开发环境配置:Visual Studio编译DeepSeek-OCR C++接口

使用Spring的BeanFactoryPostProcessor扩展点完成自定义注解扫描

概述本次实验是上一次https://blog.csdn.net/2301_80749359/article/details/157651601?fromshareblogdetailsharetypeblogdetailsharerId157651601sharereferPCsharesource2301_80749359sharefromfrom_link的扩展只是加了自定义注解较为方便。

具体步骤

1创建自定义注解packagecom.itheima.ano;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;//设定在哪些类型上可以使用Target(ElementType.TYPE)//设定作用的范围Retention(RetentionPolicy.RUNTIME)publicinterfaceMyComponent{// 配置value属性以代表bean的名字Stringvalue();}

2引入扫描注解包的工具类packagecom.itheima.utils;importcom.itheima.ano.MyComponent;importorg.springframework.core.io.Resource;importorg.springframework.core.io.support.PathMatchingResourcePatternResolver;importorg.springframework.core.io.support.ResourcePatternResolver;importorg.springframework.core.type.classreading.CachingMetadataReaderFactory;importorg.springframework.core.type.classreading.MetadataReader;importorg.springframework.core.type.classreading.MetadataReaderFactory;importorg.springframework.util.ClassUtils;importjava.lang.annotation.Annotation;importjava.util.HashMap;importjava.util.List;importjava.util.Map;publicclassBaseClassScanUtils{//设置资源规则privatestaticfinalStringRESOURCE_PATTERN/**/*.class;publicstaticMapString,ClassscanMyComponentAnnotation(StringbasePackage){//创建容器存储使用了指定注解的Bean字节码对象MapString,ClassannotationClassMapnewHashMapString,Class();//spring工具类可以获取指定路径下的全部类ResourcePatternResolverresourcePatternResolvernewPathMatchingResourcePatternResolver();try{StringpatternResourcePatternResolver.CLASSPATH_ALL_URL_PREFIXClassUtils.convertClassNameToResourcePath(basePackage)RESOURCE_PATTERN;Resource[]resourcesresourcePatternResolver.getResources(pattern);//MetadataReader 的工厂类MetadataReaderFactoryrefractorynewCachingMetadataReaderFactory(resourcePatternResolver);for(Resourceresource:resources){//用于读取类信息MetadataReaderreaderrefractory.getMetadataReader(resource);//扫描到的classStringclassnamereader.getClassMetadata().getClassName();Class?clazzClass.forName(classname);//判断是否属于指定的注解类型if(clazz.isAnnotationPresent(MyComponent.class)){//获得注解对象MyComponentannotationclazz.getAnnotation(MyComponent.class);//获得属value属性值StringbeanNameannotation.value();//判断是否为if(beanName!null!beanName.equals()){//存储到Map中去annotationClassMap.put(beanName,clazz);continue;}//如果没有为,那就把当前类的类名作为beanNameannotationClassMap.put(clazz.getSimpleName(),clazz);}}}catch(Exceptionexception){}returnannotationClassMap;}publicstaticvoidmain(String[]args){MapString,ClassstringClassMapscanMyComponentAnnotation(com.itheima);System.out.println(stringClassMap);}}

3利用工具类扫描包利用工具类扫描包包括该包及其子包下中带有MyComponent注释的类然后遍历Map进行相关的操作具体见代码注释packagecom.itheima.processor;importcom.itheima.utils.BaseClassScanUtils;importorg.springframework.beans.BeansException;importorg.springframework.beans.factory.config.BeanDefinition;importorg.springframework.beans.factory.config.ConfigurableListableBeanFactory;importorg.springframework.beans.factory.support.BeanDefinitionRegistry;importorg.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor;importorg.springframework.beans.factory.support.RootBeanDefinition;importjava.util.Map;publicclassMyComponentBeanFactoryPostProcessorimplementsBeanDefinitionRegistryPostProcessor{OverridepublicvoidpostProcessBeanDefinitionRegistry(BeanDefinitionRegistrybeanDefinitionRegistry)throwsBeansException{//先是使用扫描的工具进行扫描MapString,ClassmyComponentAnnotationMapBaseClassScanUtils.scanMyComponentAnnotation(com.itheima);// 然后是遍历这个map得到bbeanDefinitionmyComponentAnnotationMap.forEach((beanName,beanClass)-{// 先是获取到全限制名(转为String类型的)StringclassNamebeanClass.getName();// 然后是定义bbeanDefinitionBeanDefinitionbeanDefinitionnewRootBeanDefinition();beanDefinition.setBeanClassName(className);// 再是进行注册这就是放到单例池单中了beanDefinitionRegistry.registerBeanDefinition(beanName,beanDefinition);});}OverridepublicvoidpostProcessBeanFactory(ConfigurableListableBeanFactoryconfigurableListableBeanFactory)throwsBeansException{}}

4测试packagecom.itheima.test;importcom.alibaba.druid.pool.DruidDataSource;importcom.itheima.beans.OthrerBean;importcom.itheima.beans.Xxxbean;importcom.itheima.dao.impl.UserDaoImpl;importcom.itheima.dao.personDao;importcom.itheima.service.UserService;importcom.mysql.jdbc.Connection;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.springframework.beans.factory.config.BeanDefinition;importorg.springframework.beans.factory.support.DefaultListableBeanFactory;importorg.springframework.beans.factory.xml.XmlBeanDefinitionReader;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importjavax.xml.bind.annotation.XmlAccessOrder;importjava.io.IOException;importjava.io.InputStream;importjava.sql.DriverManager;publicclassBeanFactoryTest{publicstaticvoidmain(String[]args)throwsException{ApplicationContextapplicationContextnewClassPathXmlApplicationContext(applicationContext_beanfac.xml);OthrerBeanothrerBean(OthrerBean)applicationContext.getBean(otherBean);System.out.println(othrerBean);}}结果

美女姐姐跳舞视频大全-美女姐姐跳舞视频大全应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123