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

ins做甜品网站单位网站建设要求

ins做甜品网站,单位网站建设要求,html网页制作app,建设网站制作公司如何选择一、思路 先要从当前类出发找到对应包下的所有类文件#xff0c;再从这些类中筛选出类上有MyComponent注解的类#xff1b;把它们都装入Map中#xff0c;同时类属性完成MyValue的赋值操作。 二、具体实现 测试类结构#xff1a; 测试类#xff1a;myse、mycontor、BigSt…一、思路 先要从当前类出发找到对应包下的所有类文件再从这些类中筛选出类上有MyComponent注解的类把它们都装入Map中同时类属性完成MyValue的赋值操作。 二、具体实现 测试类结构 测试类myse、mycontor、BigStar、MyAnneTest结构都一致 MyComponent(BigStar) public class BigStar{MyValue(张三)private String name;Overridepublic String toString() {return BigStar{ name name \ };} }自定义注解类MyComponent--扫描类 Target({ElementType.TYPE}) // 作用范围类上 Retention(RetentionPolicy.RUNTIME) // 运行时候生效 public interface MyComponent {String value() default ; }数据注入MyValue Target({ ElementType.FIELD}) // 使用的范围 字段上 Retention(RetentionPolicy.RUNTIME) // 生效时候 运行时候 public interface MyValue {String value() default ; }三、代码编写 首先处理获得项目的包路径也是IOC启动方法 在junit4 中编写 MyIOC方法 private MapObject,Object IOCnew HashMap(); // 创建 IOC容器Testpublic void MyIOC() throws IOException, ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {ClassLoader contextClassLoader Thread.currentThread().getContextClassLoader(); //当前线程中获得类加载器// System.out.println(包路径 BigStar.class.getPackage()); // 获得包数据// 获得包资源// BigStar.class.getPackage().getName()获得包 名字// contextClassLoader.getResources() 获得资源相关的路径EnumerationURL resources contextClassLoader.getResources( BigStar.class.getPackage().getName());// 如果有存在没有被读取过的--包只有一个所有数据只有一条while (resources.hasMoreElements()){// 获得数据URL url resources.nextElement();String path url.getPath(); // 获取包的绝对路径// 包的绝对地址/C:/Users/kk/IdeaProjects/IOCTest/target/classes/beanSystem.out.println(包的绝对地址 path);// 获得地址 /C:/Users/kk/IdeaProjects/IOCTest/target/classes/beanDirectoryToClass(path); // 把包路径传入System.out.println(容器中的数据IOC);}} 对路径进行处理 只需要 “包名.类名字” 即可 DirectoryToClass方法 // 处理类路径--获得 包名字类名字private void DirectoryToClass(String Mypath) throws ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {// 获得类路径// String myclassPathmyclass.getPath();ListObject listnew ArrayList();String dgtoPath; //递归路径File filesnew File(Mypath); //打开文件if (files.isDirectory()) { //如果是目录for (File myclass : files.listFiles()) { // 遍历目录中的文件String directoryPathmyclass.getPath(); //获得单个文件路径路径// 路径例如 C:\Users\kk\IdeaProjects\IOCTest\target\classes\bean\Star.class// System.out.println(类文件路径 directoryPath);dgtoPathdirectoryPath;String path1 directoryPath.replace(\\, .); // 把 \替换成 .String path path1.replace(/, .); // 把 /替换成 .String[] split path.split(classes\\.); // 根据classes 切割字符串String classpath split[split.length - 1]; // 获得包路径路径 com.xx.cc.classif (classpath.contains(.class)) { // 是 .class后缀String[] name classpath.split(\\.class);// 根据.class切割 ---类加载器只需要包名字类名字//例如 bean.BigStar 或者bean.test.test2.myse 等System.out.println(包名.类名字name[0]);getToClass(name[0]); //参数传入获得对象} // TODO 如果是目录的话递归else {DirectoryToClass(dgtoPath); // 如果是目录就--递归}}}} 难点已经解决了剩下的就是根据包名.类名使用反射创建对象。 getToClass()方法 // 获得类对象属性private void getToClass(String classPath) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {Class? clazz Class.forName(classPath); // 获得类加载器// System.out.println(创建成功的类clazz);try { // 异常处理 即使clazz.getDeclaredConstructor().newInstance(); 遇到接口不能创建对象--程序也不会停止Object bean clazz.getDeclaredConstructor().newInstance(); // 创建对象--暴力创建MyComponent beanName clazz.getAnnotation(MyComponent.class); // 获得类上注解if(!Objects.isNull(beanName)){ // 类上有注解的时候String keybeanName.value(); // 获得注解中的value值--类名字// System.out.println(key名字key);Field[] declaredFields clazz.getDeclaredFields(); // 获得字段for (Field field:declaredFields){ // 遍历字段MyValue value field.getAnnotation(MyValue.class); // 获得字段上的注解field.setAccessible(true); // 打开权限 暴力注入 狠狠地注入field.set(bean,value.value()); // 设置当前bean对象的字段}IOC.put(key,bean); // 存储到IOC中}}catch (Exception e){System.out.println(不是类e); // 如果遇到其他类型文件、接口等}} 四、运行结果 包的绝对地址/C:/Users/kk/IdeaProjects/IOCTest/target/classes/bean 包名.类名字bean.BigStar 包名.类名字bean.MyAnneTest 包名.类名字bean.MyComponent 不是类java.lang.NoSuchMethodException: bean.MyComponent.init() 包名.类名字bean.MyValue 不是类java.lang.NoSuchMethodException: bean.MyValue.init() 包名.类名字bean.test.mycontor 包名.类名字bean.test.test2.myse 容器中的数据{mycontormycontor{hobb李四}, MyAnneTestMyAnneTest{name张三, hobby打篮球}, BigStarBigStar{name张三}, mysemyse{name后悔}} 五、后言 大多少自之定义注解都需要扫描包这一步把getToClass()方法换一下就是其他的功能。ioc真正关键的还是Autowired注解的实现我放到下篇讲解。
http://www.zqtcl.cn/news/14491/

相关文章:

  • 全国最好的加盟网站怎么关闭seo查询
  • 网站推广是网站建设完成之后的长期工作成都专业做网站推广电话
  • 有那些猎头做单的网站深圳龙华建设工程交易中心网站
  • 官方网站建设 就问磐石网络专业未来的网站建设想法
  • 网站建设公司推荐 金石下拉如何在社交网站上做视频推广
  • 成都新津网站建设市场监督管理局电话号
  • 自己的网站到期域名如何续费前端开发能干到多少岁
  • 赣州高端网站开发医疗协助平台网站建设方案
  • 厦门网站推广¥做下拉去118cr建设简单网站的图纸
  • 外贸网站推广方式wordpress数据表优化
  • 贵阳网站方舟网络最好最新新闻热点事件2023年10月
  • 靖江网站建设公司基础网站建设的实施步骤
  • 东莞市专注网站建设怎么样搜狗推广
  • 商城网站有什么好处网站首页缩略图 seo
  • 国外家装设计网站seo培训优化
  • 网站插件代码怎么用小程序官方示例
  • 手机怎么搭建网站源码建筑工程网课文案
  • thinkphp2.1网站挂文件婚庆网
  • 一流的微商城网站建设应用商场安全下载安装
  • 个人做网站给手机发短信免费注册自助网站
  • 淘宝客网站如何让做嘉兴网站建议
  • 北京网站建设模板下载学做面食最好的网站
  • 免费前端模板网站石家庄业之峰装饰公司怎么样
  • 如何知道别人的网站流量来自于哪里移动网站自助制作
  • 长宁区网站建设公工商营业执照网上查询官网
  • 全自动网站制作源码wordpress 渲染html
  • 东莞市建设小学网站北航刘禹导师做网站
  • 珠海教育局系统网站网站建设需求多少钱大概
  • 做模具的网站嵌入式软件开发工资高吗
  • 做网站怎么套模板做网站需要办什么证件