动态链接做网站外链图南京网站制作公司招聘

pingmian/2025/10/9 3:46:55/文章来源:
动态链接做网站外链图,南京网站制作公司招聘,建筑人才网邀约投递,文秘写作网站实现功能 需求#xff1a;在类的成员属性使用Autowirde注解注入容器中的对象。 实现思路 要实现这个功能。我们首先要思考一个问题#xff1a;类与类的关系是在调用的建立的#xff0c;还是说在创建对象的时候就就将建立了#xff1f; ---我实现的方案是#xff0c;在在程…实现功能   需求在类的成员属性使用Autowirde注解注入容器中的对象。   实现思路 要实现这个功能。我们首先要思考一个问题类与类的关系是在调用的建立的还是说在创建对象的时候就就将建立了   ---我实现的方案是在在程序启动后所有对象创建后直接就将对象的属性和属性之间的关系创建了。接下来我就用这个思路来实现将根据Autowirde建立对象与对象之间的关系。   为什么一定要对象全部创建后再实现对象与对象直接的关系呢 这个是逻辑问题如果对象没有创建完就建立对象与对象之间的关系人家都还没有创建你怎么引用呢对吧。所有一定在所有对象创建完后建立对象与对象的关系。     实现步骤 1.Context接口增加一个方法。用于通过Map的和属性名对象或者对象的类型与属性的类型对象给属性匹配对象。定义如代码的说明   1 /** 2 * 根据类的类型以及设置的对象名返回容器对象 3 * 如果传入的类型容器中有对应key的对象而且返回类型是兼容的直接返回对应的对象。 4 * 如果传入的类型容器中有没有对应key的对象那么判断传入的类型是否和容器的对象的找到唯一配置的。 5 * 如果传入类型唯一匹配返回对象。如果没有或者配配多个对象都报一个RuntimeException异常 6 * param classType 7 * return 8 */ 9 Object getObject(Class? classType,String key);   2.在ContextImpl容器实现类实现这个方法 1 Override2 public Object getObject(Class? classType, String key) {3 // 1.判断是否有对应key的对象4 Object object objects.get(key);5 // 2.如果有而且类型也兼容。直接返回该对象。6 if (object ! null classType.isAssignableFrom(object.getClass())) {7 return object;8 } else {9 // 3.如果没有对应key的对象那么就在容器里检索是否有兼容类型的对象。 10 CollectionObject values objects.values(); 11 IteratorObject iterator values.iterator(); 12 int count 0; 13 Object currentObject null; 14 while (iterator.hasNext()) { 15 Object nextObject iterator.next(); 16 //判断classType是否是nextObject.getClass()的兼容类型。 17 boolean from classType.isAssignableFrom(nextObject.getClass()) ; 18 if (from) { 19 //如果发现有对象计数加1 20 count; 21 //并将对象赋予当前对象 22 currentObject nextObject; 23 } 24 } 25 // 如果兼容类型的对象只有一个返回这个对象。如果大于一个返回null 26 if (count 1) { 27 return currentObject; 28 } else { 29 //如果发现一个类型容器中有多个异常抛异常 30 throw new RuntimeException(容器中找不到对应的对象或者找到的对象不是唯一的请确认是否一个接口继承了多个类); 31 } 32 33 } 34 35 } 3.在AbstractApplicationContext容器操作类实现属性的注入方法 autowired()   1 /**2 * 给对象的属性注入关联的对象3 * throws IllegalArgumentException4 * throws IllegalAccessException5 */6 private void autowired() throws IllegalArgumentException, IllegalAccessException {7 // 1.获得容器8 Context context contexts.get();9 // 2.获得容器中的所有对象。 10 MapString, Object objects context.getObjects(); 11 // 3.获得容器中所有的对象值 12 CollectionObject values objects.values(); 13 // 4.获得对象的迭代器 14 IteratorObject iterator values.iterator(); 15 while (iterator.hasNext()) { 16 Object object iterator.next(); 17 // 5.获得对象的表结构 18 Class? extends Object classType object.getClass(); 19 // 6.获得字段的结构 20 Field[] fields classType.getDeclaredFields(); 21 for (int i 0; i fields.length; i) { 22 // autowired获得注解 23 Autowired autowired fields[i].getAnnotation(Autowired.class); 24 if (autowired ! null) { 25 Class? fieldType fields[i].getType(); 26 String fieldName fields[i].getName(); 27 // 如果容器里面有对应的对象 28 Object fieldObject context.getObject(fieldType, fieldName); 29 // 允许访问私有方法 30 if (fieldObject ! null) { 31 // 属性是私有的也可以访问 32 fields[i].setAccessible(true); 33 // 将属性值赋予这个对象的属性 34 fields[i].set(object, fieldObject); 35 } 36 37 } 38 } 39 } 40 }   4. 在AbstractApplicationContext构造方法最后调用属性注入方法autowired注意标红处   1 public AbstractApplicationContext(Class? classType) {2 try {3 // 判断配置类是否有Configuration注解4 Configuration annotation classType.getDeclaredAnnotation(Configuration.class);5 if (annotation ! null) {6 // 获得组件扫描注解7 ComponentScan componentScan classType.getDeclaredAnnotation(ComponentScan.class);8 // 获得包名9 this.basePackage componentScan.basePackages(); 10 // 根据包名获得类全限制名 11 // SetString classNames 12 // PackageUtils.getClassName(this.basePackage[0], true); 13 // 将扫描一个包修改为多个包 14 SetString classNames PackageUtils.getClassNames(this.basePackage, true); 15 // 通过类名创建对象 16 IteratorString iteratorClassName classNames.iterator(); 17 while (iteratorClassName.hasNext()) { 18 19 String className iteratorClassName.next(); 20 // System.out.println(className); 21 22 // 通过类全名创建对象 23 Class? objectClassType Class.forName(className); 24 /* 25 * 判断如果类权限名对应的不是接口并且包含有Component|Controller|Service| 26 * 27 * Repository 才可以创建对象 28 */ 29 if (this.isComponent(objectClassType)) { 30 Object instance objectClassType.newInstance(); 31 // 修改为,默认对象支持首字符小写 32 String objectName null; 33 // 获得组件注解的name属性值 34 String componentName this.getComponentOfName(objectClassType); 35 36 if (componentName null) { 37 // 如果组件注解的name属性没有值使用默认命名对象 38 objectName NamingUtils.firstCharToLower(instance.getClass().getSimpleName()); 39 } else { 40 // 如果组件注解的name属性有值使用自定义命名对象 41 objectName componentName; 42 } 43 this.getContext().addObject(objectName, instance); 44 } 45 46 } 47 } 48 //1.注入对象到属性中。 49 autowired(); 50 } catch (InstantiationException e) { 51 e.printStackTrace(); 52 } catch (IllegalAccessException e) { 53 e.printStackTrace(); 54 } catch (ClassNotFoundException e) { 55 e.printStackTrace(); 56 } 57 58 }    测试代码 测试类目录结构   1.修改UserController代码增加注入UserService的代码   1 package ioc.core.test.controller;2 3 import ioc.core.annotation.Autowired;4 import ioc.core.annotation.stereotype.Controller;5 import ioc.core.test.service.UserService;6 7 Controller8 public class UserController {9 10 /** 11 * 通过Autowired可以注入UserService的对象。 12 */ 13 Autowired 14 private UserService userServiceImpl; 15 16 public void login(){ 17 System.out.println(-登录Controller-); 18 userServiceImpl.login(); 19 } 20 21 }   2.调用UserController 对象 1 package ioc.core.test;2 3 import org.junit.Test;4 5 import ioc.core.impl.AnntationApplicationContext;6 import ioc.core.test.config.Config;7 import ioc.core.test.controller.UserController;8 9 public class AnntationApplicationContextTest { 10 11 Test 12 public void login(){ 13 try { 14 AnntationApplicationContext contextnew AnntationApplicationContext(Config.class); 15 UserController userController context.getBean(userController, UserController.class); 16 userController.login(); 17 System.out.println(context.getContext().getObjects()); 18 19 } catch (Exception e) { 20 e.printStackTrace(); 21 } 22 } 23 24 } 3.输出结果 同时输出了UserController的内容和UserService的内容  转载于:https://www.cnblogs.com/zhuyuejiu/p/7819694.html

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

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

相关文章

网站建设报告总结平面设计线上培训班哪个好

所谓的激活函数,就是李宏毅老师讲到的sigmoid函数 和 hard sigmoid函数 ,ReLU函数那些 现在一点点慢慢探索,会成为日后想都做不到的经历,当你啥也不会的时候,才是慢慢享受探索的过程。 有一说一,用chatGP…

河间市网站建设大连云app官方下载

Yocto .bb 文件字段解析 本文详细讲解了 Yocto .bb 文件中各字段的作用和用法,包括 SECTION、SRC_URI、SUMMARY 等,旨在帮助开发者更好地理解和使用 Yocto 构建系统。 目录 1. SECTION 字段 1.1 SECTION 的作用1.2 SECTION 的用法1.3 如何使用 SECTIO…

四平英文网站建设网站开发职业资格证书

今天给大家分享一个目前在小红书很火的AI绘画商单号案例。 首先给大家看看案例视频形态 这类视频内容非常简单,主要展示农家庭院的别致景色。通过AI绘画工具生成图片,再利用剪辑工具将画面增加动态元素,让整个视频逼真鲜活,加上…

做不锈钢的网站wordpress用户组设置

4.3 云开发文件存储 4.3.4 删除文件 在小程序端和云函数端,都可以调用API删除云空间中的文件,这两个API的参数和回调函数参数都是一样。每次调用API最多删除50个文件。使用方法如下代码所示: // 回调风格的API wx.cloud.deleteFile({ file…

域名大全免费网站app开发费用

在eclipse下构建maven项目,该项目由多个子模块组成。 1.创建一个父项目 NEW -->project-->maven-->maven Project,点击下一步,进入new maven Project的Select project name and location界面 ,什么也不做,直接…

快速网站备案多少钱网站建设的设计总结

一、学习目标 了解第一个C程序了解第一个C程序结构了解什么是注释了解什么是命名空间了解C语言的输出(如何在程序运行时显示内容)了解语句结束后需要使用什么符号表示结束 了解程序入口 目录 预备第一篇,使用软件介绍在这一篇,…

怎么做优惠卷网站seo排名网

文章目录 安装py2neo创建节点-连线关系图导入csv文件删除重复节点并连接边 安装py2neo 安装python中的neo4j操作库:pip install py2neo 安装py2neo后我们可以使用其中的函数对neo4j进行操作。 图数据库Neo4j中最重要的就是结点和边(关系)&a…

网站开发语言有什么招投标中网站建设评分标准

2021年10月,国务院印发《2030年前碳达峰行动方案》,明确提出要建设绿色低碳园区,并选择100个具有典型代表性的城市和园区开展碳达峰试点建设,在政策、资金、技术等方面对试点城市和园区给予支持。此后,碳达峰、碳中和正…

南京驰铭做网站公司南充网站建设费用

近年来,随着中韩交流的日益密切,韩语翻译在国内的需求呈现出不断增长的态势。无论是韩语笔译还是口译,其应用领域都非常广泛。那么,韩语翻译的价格是否高昂?翻译公司又是如何进行报价的呢? 在翻译领域&…

北京通州做网站的公司北京网站制作公司清远

文章目录 一、什么是死循环二、以fo循环示例三、如何避免死循环 一、什么是死循环 死循环就是循环语句的 循环布尔表达式 一直为true,没有终止循环的条件或者终止循环的条件根本不可能达成 二、以fo循环示例 /** 终止循环的条件根本不可能达成* 循环布尔表达式&a…

网站开发全程实例课本代码广东的网站备案

来源:数据观 概要:目前,中国的人工智能研究处于爆发期,行业巨头公司正逐渐完善自身在人工智能的产业链布局,而不断涌现出的创业公司将持续在垂直领域深耕深挖。 目前,中国的人工智能研究处于爆发期&#x…

天津市规划局官方网站建设项目做网站要会那些ps

Java 的异常 异常:在Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)Java程序在执行过程中所发生的异常事件可分为两类: Error: Java虚拟机无法解决的严重问题。如:JVM系统内部…

一个域名可以做中英文两个网站吗襄阳网站制作

数据来源:八月成交数据 数据初探 业务背景 数据来源行业:金融行业(根据应收利息和逾期金额字段来判断) 可以猜测: 业务主体:某互联网金融公司(类似支付宝)也业务模式:给…

网站建设公司找客户网站推广产品怎么做

emsp;emsp;栈的经典算法问题 一、括号匹配问题 emsp;首先看题目要求,LeetCode20.给定一个只包括’(‘,)’,‘{,’,[,]的字符串s,,判断字符串是否有效。有效字符串需满足: 1.左括号…

北京建设网站合同下载网页制作与网站建设宝典扫描版pdf

一、Beanutils中的copyProperties是我们在日常开发中常用的一个方法。 作用: 将a实体类中的属性赋值到b实体类中相对于的字段上 1.我们前端传参的时候我们后端通常会用vo实体类来接收,但是更新数据库的时候需要用do去操作 2.我们将vo的属性copy到do中可…

怎样打开网站制作ps软件下载要多少钱

假如一堆数据&#xff0c;每一个数据都有一个标志位&#xff0c;按照标志位值的不同进行划分为不同的组&#xff0c;进行归类。 代码如下&#xff1a; void chunzhongForm::traverseList(winProList &dataList) {int nSize dataList.size();for(int i 0; i < nSize; …

网站开发项目分析模板羽毛球网站建设网站

在IE浏览器中&#xff0c;当input获得焦点时&#xff0c;点击有unselectable"on"属性的标签时&#xff0c;不会触发onblur事件。加上该属性的元素不能被选中。< !DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">< html>< h…

景德镇市建设厅网站qq网页版在线登录

在我们的日常生活中&#xff0c;猫罐头是一种常见的宠物食品&#xff0c;但是有很多养猫的铲屎官都不知道应该如何为猫咪挑选一款合适且满意的猫罐头。作为经营一家宠物店7年的店长&#xff0c;我店里的猫猫最多的时候可以达到60多只&#xff0c;这些年来它们也吃过了很多种类的…

网站空间ip需不需要备案晋中住房保障和城乡建设局网站

在做项目中遇到一个问题 对某个参数赋值成功后页面中没有改变 经过多方查阅终于解决这个问题 跟大家分享一下 希望可以帮到你 方法1&#xff08;推荐&#xff09;&#xff1a;用JSON.parse(JSON.stringify(objectOrArray)) 通常是某个渲染的数组改变了层级较深的数据导致页面…

建设网站得目的网页设计规划书模板

文章目录 概要加载样例图像统计数据分析White Patch Algorithm小结 概要 白平衡技术在摄影和图像处理中扮演着至关重要的角色。在不同的光照条件下&#xff0c;相机可能无法准确地捕捉到物体的真实颜色&#xff0c;导致图像呈现出暗淡、色调不自然或者褪色的效果。为了解决这个…