上海平台网站建设报价外贸营销网页设计

bicheng/2026/1/18 12:07:49/文章来源:
上海平台网站建设报价,外贸营销网页设计,网站的管理包括,用帝国做的网站只收录首页阶段2: // 1.编写自己的Spring容器,实现扫描包,得到bean的class对象.2.扫描将 bean 信息封装到 BeanDefinition对象,并放入到Map.思路: 1.将 bean 信息封装到 BeanDefinition对象中,再将其放入到BeanDefinitionMap集合中,集合的结构大概是 key[beanName]–value[beanDefintion…阶段2: // 1.编写自己的Spring容器,实现扫描包,得到bean的class对象.2.扫描将 bean 信息封装到 BeanDefinition对象,并放入到Map.思路: 1.将 bean 信息封装到 BeanDefinition对象中,再将其放入到BeanDefinitionMap集合中,集合的结构大概是 key[beanName]–value[beanDefintion] key---------对应指定的名字,未指定则以类的首字母小写为其名字 value-------对应封装好的BeanDefintion对象 2.因为bean的作用域可能是singleton,也可能是prototype,所以Spring需要扫描到bean信息,保存到集合,这样当getBean()根据实际情况处理. 具体实现 1.加一个自定义Scope注解 package com.elf.spring.annotation;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/*** author 45~* version 1.0* Scope 可以指定一个Bean的作用范围[singleton,prototype]*/ Target(ElementType.TYPE) Retention(RetentionPolicy.RUNTIME) public interface Scope {//通过value可以指定singleton,prototypeString value() default ; } 2.在MonsterService.java上加上Scope多实例注解 package com.elf.spring.component; import com.elf.spring.annotation.Component; import com.elf.spring.annotation.Scope;/*** author 45~* version 1.0* 说明 MonsterService 是一个Servic*/ Component //把MonsterService注入到我们自己的spring容器中 Scope(value prototype) public class MonsterService {} 3.准备ioc包下写一个BeanDefinition.java 用于封装记录Bean信息. package com.elf.spring.ioc;/*** author 45~* version 1.0* BeanDefinition 用于封装和记录Bean的信息 [1.scope 2.存放bean对应的Class对象,反射可以生成对应的对象]* 2:因为将来getBean()时有可能是多实例,有可能是动态生成的,还要存放bean的class对象*/ public class BeanDefinition {private String scope;private Class clazz;//存放bean的class对象public String getScope() {return scope;}public void setScope(String scope) {this.scope scope;}public Class getClazz() {return clazz;}public void setClazz(Class clazz) {this.clazz clazz;}Overridepublic String toString() {return BeanDefinition{ scope scope \ , clazz clazz };} } 3.pom.xml文件引入jar包下的工具类commons-lang,完成首字母小写的功能.而不用springframework自带的StringUtils工具类 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.elf/groupIdartifactIdelf-myspring1207/artifactIdversion1.0-SNAPSHOT/versiondependenciesdependencygroupIdcommons-lang/groupIdartifactIdcommons-lang/artifactIdversion2.6/version/dependency/dependencies/project4.容器文件,把构造器里边的方法抽取出来封装成一个方法,直接在构造器中调用,使代码简洁. 这里完成生成BeanDefinition对象并放入到Map里面 添加内容1: //定义属性BeanDefinitionMap - 存放BeanDefinition对象(多例对象)private ConcurrentHashMapString,BeanDefinition beanDefinitionMap new ConcurrentHashMap();//定义属性SingletonObjects - 存放单例对象 (跟原生容器的名字保持一致)//因为将来存放单例池的时候肯定要指定单例对象是对应哪个Bean的,所以k用String来充当//存放单例对象的类型是不确定的,可能是Dog,Cat,或者其他的对象,所以用Objectprivate ConcurrentHashMapString,Object singletonObjects new ConcurrentHashMap();添加内容2: //先得到beanName(有可能通过经典4注解,例如Component注解的value值来指定)//1.得到类上的Component注解,此时的clazz已经是当前bean的class对象,通过类加载器得到的 反射知识Component componentAnnotation cla.getDeclaredAnnotation(Component.class);//2.得到配置的valueString beanName componentAnnotation.value();if(.equals(beanName)){//如果没有写value,空串//将该类的类名首字母小写作为beanName//StringUtils其实是在springframework的框架下面的类,而这里本身我就是要自己写所以不用beanName StringUtils.uncapitalize(className);}//3.将Bean的信息封装到BeanDefinition对象中,然后将其放入到BeanDefinitionMap集合中BeanDefinition beanDefinition new BeanDefinition();//!!!多看看这里多理解beanDefinition.setClazz(cla);//由类加载器通过反射得到对象,Class? cla classLoader.loadClass(classFullName);//4.获取Scope值if (cla.isAnnotationPresent(Scope.class)){//如果配置了Scope,就获取它配置的值Scope scopeAnnotatiion cla.getDeclaredAnnotation(Scope.class);beanDefinition.setScope(scopeAnnotatiion.value());}else{//如果没有配置Scope,就以默认的值singletonbeanDefinition.setScope(singleton);}//将beanDefinitionMap对象放入MapbeanDefinitionMap.put(beanName,beanDefinition);}else {//如果该类没有使用了Component注解,说明是一个Spring beanSystem.out.println(这不是一个Spring bean cla 类名 className);}容器文件 package com.elf.spring.ioc;import com.elf.spring.annotation.*; import org.apache.commons.lang.StringUtils;import java.io.File; import java.net.URL; import java.util.concurrent.ConcurrentHashMap;/*** author 45~* version 1.0*/ public class ElfSpringApplicationContext {//第一步,扫描包,得到bean的class对象,排除包下不是bean的,因此还没有放到容器中//因为现在写的spring容器比原先的基于注解的,要更加完善,所以不会直接把它放在ConcurrentHashMapprivate Class configClass;//定义属性BeanDefinitionMap - 存放BeanDefinition对象private ConcurrentHashMapString,BeanDefinition beanDefinitionMap new ConcurrentHashMap();//定义属性SingletonObjects - 存放单例对象 (跟原生容器的名字保持一致)//因为将来存放单例池的时候肯定要指定单例对象是对应哪个Bean的,所以k用String来充当//存放单例对象的类型是不确定的,可能是Dog,Cat,或者其他的对象,所以用Objectprivate ConcurrentHashMapString,Object singletonObjects new ConcurrentHashMap();//构造器public ElfSpringApplicationContext(Class configClass) {beanDefinitionScan(configClass);//调用封装方法,简洁System.out.println(beanDefinitionMap beanDefinitionMap);}//构造器结束//该方法完成对指定包的扫描,并将Bean信息封装到BeanDefinition对象,再放入到Map中public void beanDefinitionScan(Class configClass){this.configClass configClass;/**获取要扫描的包:1.先得到ElfSpringConfig配置的 ComponentScan(value com.elf.spring.component)2.通过 ComponentScan的value 即要扫描的包 **/ComponentScan componentScan (ComponentScan) this.configClass.getDeclaredAnnotation(ComponentScan.class);String path componentScan.value();System.out.println(要扫描的包path path);/*** 得到要扫描包下的所有资源(类.class)* 1.得到类的加载器 - APP类加载器是可以拿到 target目录下的classes所有文件的* 2.通过类的加载器获取到要扫描的包的资源url 类似一个路径* 3.将要加载的资源(.class)路径下的文件进行遍历 io*/ClassLoader classLoader ElfSpringApplicationContext.class.getClassLoader();path path.replace(., /); // 把.替换成 /URL resource classLoader.getResource(path);System.out.println(resource resource);File file new File(resource.getFile());if (file.isDirectory()) {File[] files file.listFiles();for (File f : files) { //把所有的文件都取出来System.out.println();System.out.println(f.getAbsolutePath() f.getAbsolutePath());String fileAbsolutePath f.getAbsolutePath();//到target的classes目录下了//这里只处理.class文件if (fileAbsolutePath.endsWith(.class)) {//1.获取类名String className fileAbsolutePath.substring(fileAbsolutePath.lastIndexOf(\\) 1,fileAbsolutePath.indexOf(.class));//2.获取类的完整路径(全类名)String classFullName path.replace(/, .) . className;System.out.println(classFullName classFullName);//3.判断该类是否需要注入,就看是不是有注解Component Service Contoller Re....try {Class? cla classLoader.loadClass(classFullName);if (cla.isAnnotationPresent(Component.class) ||cla.isAnnotationPresent(Controller.class) ||cla.isAnnotationPresent(Service.class) ||cla.isAnnotationPresent(Repository.class)) {//演示机制//如果该类使用了Component注解,说明是一个Spring beanSystem.out.println(这是一个Spring bean cla 类名 className);//先得到beanName(有可能通过经典4注解,例如Component注解的value值来指定)//1.得到类上的Component注解,此时的clazz已经是当前bean的class对象,通过类加载器得到的 反射知识Component componentAnnotation cla.getDeclaredAnnotation(Component.class);//2.得到配置的valueString beanName componentAnnotation.value();if(.equals(beanName)){//如果没有写value,空串//将该类的类名首字母小写作为beanName//StringUtils其实是在springframework的框架下面的类,而这里本身我就是要自己写所以不用beanName StringUtils.uncapitalize(className);}//3.将Bean的信息封装到BeanDefinition对象中,然后将其放入到BeanDefinitionMap集合中BeanDefinition beanDefinition new BeanDefinition();//!!!多看看这里多理解beanDefinition.setClazz(cla);//由类加载器通过反射得到对象,Class? cla classLoader.loadClass(classFullName);//4.获取Scope值if (cla.isAnnotationPresent(Scope.class)){//如果配置了Scope,就获取它配置的值Scope scopeAnnotatiion cla.getDeclaredAnnotation(Scope.class);beanDefinition.setScope(scopeAnnotatiion.value());}else{//如果没有配置Scope,就以默认的值singletonbeanDefinition.setScope(singleton);}//将beanDefinitionMap对象放入MapbeanDefinitionMap.put(beanName,beanDefinition);}else {//如果该类没有使用了Component注解,说明是一个Spring beanSystem.out.println(这不是一个Spring bean cla 类名 className);}} catch (Exception e) {e.printStackTrace();}}}//遍历文件for循环结束System.out.println(~~~~~~~~~~~~~~~~~~~~~~~~~~~~);}}//编写放法返回容器中的对象public Object getBean(String name) {return null;} }运行结果 beanDefinitionMap{ monsterServiceBeanDefinition{scope‘prototype’, clazzclass com.elf.spring.component.MonsterService}, monsterDaoBeanDefinition{scope‘singleton’, clazzclass com.elf.spring.component.MonsterDao} } ok 这里存在一个问题:单例多例对象都是放在beanDefinitionMap, singletonObjects里没有单例对象.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/89219.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站建设客户需求网络营销的定义是什么

题目 下载题目所给的压缩包后解压得到文本提示 由题目名可知为凯撒密码 根据提示格式为flag{},所以猜测前四个字符原文为flag 先来推测一下偏移量 a->f 偏移量为-5,按道理来说每个字符的偏移量都是一样的,但是对照过后发现后面的字符对…

电商门户网站常州网上车管所

一、概念 (1) 定义 在数据库系统中针对不同的使用对象和应用目的,采用不同的数据模型。根据模型的应用的不同目的,可以将这些模型划分为两类: (2) 分类 A:概念数据模型 它也称信息模型它是按用户的观点(观念世界&…

o2o网站建设方案讲解国内十大网站建设公司

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

江苏建设管理信息网站wordpress 写模版

题目难度: 简单原题链接 题目描述给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。示例 1:输入:"tactcoa" 输出…

展厅设计说明200字seo自然排名优化

最近遇到一个需求&#xff0c;一个古早的移动端 juery 项目要求做一个页面&#xff0c;从接口获取 pdf 文件流&#xff0c;然后预览出来 这里使用第三方工具&#xff1a;pdf.js 代码如下&#xff1a; // 引入相关文件<script src"../js/pdf.js" type"text…

湖北网站建设 鄂 icp小程序ui界面设计

动态规划&#xff1a; 1.先声明dp数组的含义为下标i表示的是在s变量中i前面的字符串是否在wordDict变量中存在&#xff0c;初始化dp【0】来进行后面dp数组的递推。同时要判断截取的值是否在wirdDict中是否存在&#xff0c;还要判断dp【j】的下标的j前面的字符串是否也在wirdDi…

怎么用ps做网站效果图市场调查数据分析

前言&#xff1a;在前面我们知道在类和对象中有六个默认成员函数&#xff0c;并学习了其中三个构造函数、析构函数、拷贝构造函数&#xff0c;今天我们将进一步的学习.赋值运算符重载。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质…

wordpress is_tag百度智能建站适合优化吗

一、数据类型 数据类型分为数值型、布尔型、字符串型等 1.1数值类型 数值类型可以分为整数类型、浮点数类型、复数类型 1.1.1整数类型 (1)概念&#xff1a;整数类型指数值是没有小数部分的&#xff0c;包含正整数、负整数和0 (2)进制种类&#xff1a;十进制--->234、5…

零库存品牌童装杭州网站建设嘉兴seo排名

在当今数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。数据分析作为一项强大的工具&#xff0c;对企业来说已经不再是可选项&#xff0c;而是一项必不可少的战略性举措。为什么企业要做数据分析&#xff1f;让我们深入探讨这个问题。 提升决策质量&#xff1a; 数据…

做网站学桂林生活网分类信息网站

桌子上有一水杯&#xff0c;杯子里有半杯水。 甲看到了说&#xff1a;太好了&#xff0c;还有半杯水。 乙看到了说&#xff1a;只有半杯水了。 从另一个角度说&#xff0c;甲关注的是“水”&#xff0c;而乙关注的是“空气”即水面到杯子口的那段空间。 收获到了&#xff0c;那…

网站制作的流程包括网站建设技术外文文献

第一章 绪论 一、数据库系统概述 1.数据库的4个基本概念 &#xff08;1&#xff09;数据 描述事物的符号记录称为数据 &#xff08;2&#xff09;数据库 存放数据的仓库 &#xff08;3&#xff09;数据库管理系统 主要功能&#xff1a; &#xff08;1&#xff09;数据定…

免费做公司手机网站怎样在网站做环评公示

前言 在学 Java的时候&#xff0c;我们学习了一个标准类 java.net.URL&#xff0c;该类在 Java SE 中的定位为统一资源定位器&#xff08;Uniform Resource Locator&#xff09;&#xff0c;但是我们知道它的实现基本只限于网络形式发布的资源的查找和定位。然而&#xff0c;实…

网站付费推广渠道做商城网站产品怎么分布

作为一名热衷于分布式系统的开发者&#xff0c;你或许对Tomcat8已经不陌生了。然而&#xff0c;单个Tomcat实例的性能和可用性总有瓶颈&#xff0c;要实现高可用性和更强的性能&#xff0c;就需要搭建一个Tomcat集群。在这篇文章中&#xff0c;我将带你一步步搭建一个基于Tomca…

网站开发源码虚拟主机可以做视频视频网站吗

transition: right 1s; //重点直接改变right值 操作过快 这里用该方法实现1s内淡入淡出 达到效果目标

东莞整合网站建设公司版式设计素材网站

目录 1、实验目的 2、实验预习与准备 3、实验内容及步骤 本博客为数据库课布置的实验二的作业。 1、实验目的 &#xff08;1&#xff09; 掌握Select子句的功能和检索数据的方法 &#xff08;2&#xff09; 掌握对查询结果排序的方法 2、实验预习与准备 &#xf…

聊城网站开发thinkphp做的网站源码

本篇文章主要是对a、img和table标签用法介绍&#xff1a;a标签&#xff1a;可称为锚元素&#xff0c;主要功能是创建通向其他网页、文件、同一页面的其他位置、电子邮件地址或其他任何url地址的超链接&#xff1b;1.img标签&#xff1a;发出get请求并显示返回的图片1.常用属性&…

高端网站建设北京企业品牌营销推广

前言 看视频有UP主提到“AC5”“AC6”这样的词&#xff0c;一开始有些不理解&#xff0c;原来他说的是ARMCC版本。 keil自带的是ARMCC5&#xff0c;由于ARMCC5已经停止维护了&#xff0c;很多开发者会选择ARMCC6。 在维护公司“成年往事”项目可能就会遇到新KEIL旧版本编译器…

交通运输企业标准建设网站广州新闻报道

华为乾坤区县教育安全云服务解决方案&#xff08;1&#xff09; 课程地址方案背景客户痛点分析区县教育网概述区县教育网业务概述区县教育网业务安全风险分析区县教育网安全运维现状分析区县教育网安全建设痛点分析 安全解决方案功能概述架构概述方案架构设备选型 课程地址 本…

《网站设计与建设》电子书做一个手机网站多少钱

原生小程序开发如何使用 tailwindcss 原生小程序开发如何使用 tailwindcss 前言什么是 weapp-tailwindcss ?0. 准备环境以及小程序项目1. 安装与配置 tailwindcss 0. 使用包管理器安装 tailwindcss1. 在项目目录下创建 postcss.config.js 并注册 tailwindcss2. 配置 tailwind…

兰亭集势网站模板手游充值代理平台

目录 前言 一、背景 传统序列模型的问题 Transformer的动机 二、组成部分 自注意力机制&#xff08;Self-Attention&#xff09; 编码器和解码器 位置编码 前馈神经网络 三、训练和推理 训练过程 推理过程 四、应用 自然语言处理任务 图像处理和其他领域 BERT和…