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

珠海高端网站建设公司定制床需要多少钱

珠海高端网站建设公司,定制床需要多少钱,iis 建立子网站,平台公司运营模式概述 模拟大致的底层原理#xff0c;为学习Spring源码做铺垫。 实现的功能#xff1a;扫描路径、依赖注入、aware回调、初始化前、初始化、初始化后、切面 未实现的功能#xff1a;构造器推断、循环依赖 重点#xff1a;BeanDefinition、BeanPostProcessor 学习Spring…概述 模拟大致的底层原理为学习Spring源码做铺垫。 实现的功能扫描路径、依赖注入、aware回调、初始化前、初始化、初始化后、切面 未实现的功能构造器推断、循环依赖 重点BeanDefinition、BeanPostProcessor 学习Spring源码的重点设计模式、编码规范、设计思想、扩展点 启动类 public class Yeah {public static void main(String[] args){GaxApplicationContext gaxApplicationContext new GaxApplicationContext(AppConfig.class);UserInterface userService (UserInterface) gaxApplicationContext.getBean(userService);userService.test();} } 关键方法 public class GaxApplicationContext {private Class configClass;private static final String SINGLETON singleton;private MapString, BeanDefinition beanDefinitionMap new HashMap();private MapString, Object singletonObjects new HashMap();// Spring源码用的是LinkedListprivate ListBeanPostProcessor beanPostProcessorList new ArrayList();public GaxApplicationContext(Class configClass){this.configClass configClass;// 扫描指定路径找到所有Component注解的类封装成beanDefinition保存再Map中scan(configClass);// 思考个问题beanDefinitionMap.keySet()和beanDefinitionMap.entrySet()两种遍历的区别选用哪个好for (Map.EntryString, BeanDefinition entry : beanDefinitionMap.entrySet()){String beanName entry.getKey();BeanDefinition beanDefinition entry.getValue();if (SINGLETON.equals(beanDefinition.getScope())){Object bean createBean(beanName, beanDefinition);singletonObjects.put(beanName, bean);}}}private Object createBean(String beanName, BeanDefinition beanDefinition){Class clazz beanDefinition.getType();Object instance null;try{// 直接使用默认的无参构造器多个构造器的场景未实现instance clazz.getConstructor().newInstance();// 属性填充依赖注入for (Field field : clazz.getDeclaredFields()){if (field.isAnnotationPresent(Autowired.class)){field.setAccessible(true);field.set(instance, getBean(field.getName()));}}// aware回调if (instance instanceof BeanNameAware){((BeanNameAware)instance).setBeanName(beanName);}// 初始化前for (BeanPostProcessor beanPostProcessor : beanPostProcessorList){instance beanPostProcessor.postProcessBeforeInitialization(instance, beanName);}// 初始化if (instance instanceof InitializingBean){((InitializingBean)instance).afterPropertiesSet();}// 初始化后for (BeanPostProcessor beanPostProcessor : beanPostProcessorList){instance beanPostProcessor.postProcessAfterInitialization(instance, beanName);}}catch (InstantiationException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e){e.printStackTrace();}return instance;}public Object getBean(String beanName){if (!beanDefinitionMap.containsKey(beanName)){throw new NullPointerException();}BeanDefinition beanDefinition beanDefinitionMap.get(beanName);if (SINGLETON.equals(beanDefinition.getScope())){Object singletonBean singletonObjects.get(beanName);if (null singletonBean){singletonBean createBean(beanName, beanDefinition);singletonObjects.put(beanName, singletonBean);}return singletonBean;}else{// 原型BeanObject prototypeBean createBean(beanName, beanDefinition);return prototypeBean;}}private void scan(Class configClass){if (configClass.isAnnotationPresent(ComponentScan.class)){ComponentScan componentScanAnnotation (ComponentScan)configClass.getAnnotation(ComponentScan.class);String path componentScanAnnotation.value();// path com/gax/servicepath path.replace(., /);ClassLoader classLoader GaxApplicationContext.class.getClassLoader();URL resource classLoader.getResource(path);assert resource ! null;File file new File(resource.getFile());if (file.isDirectory()){for (File f : Objects.requireNonNull(file.listFiles())){String absolutePath f.getAbsolutePath();absolutePath absolutePath.substring(absolutePath.indexOf(com), absolutePath.indexOf(.class));// 类加载器入参需要的格式com.gax.service.XXXabsolutePath absolutePath.replace(\\, .);try{Class? clazz classLoader.loadClass(absolutePath);if (clazz.isAnnotationPresent(Component.class)){if (BeanPostProcessor.class.isAssignableFrom(clazz)){BeanPostProcessor instance (BeanPostProcessor)clazz.getConstructor().newInstance();beanPostProcessorList.add(instance);}Component componentAnnotation clazz.getAnnotation(Component.class);String beanName componentAnnotation.value();if (.equals(beanName)){// 默认beanNamebeanName Introspector.decapitalize(clazz.getSimpleName());}BeanDefinition beanDefinition new BeanDefinition();beanDefinition.setType(clazz);if (clazz.isAnnotationPresent(Scope.class)){Scope scopeAnnotation clazz.getAnnotation(Scope.class);String value scopeAnnotation.value();beanDefinition.setScope(value);}else{// 默认单例BeanbeanDefinition.setScope(SINGLETON);}beanDefinitionMap.put(beanName, beanDefinition);}}catch (ClassNotFoundException | NoSuchMethodException | InvocationTargetException| InstantiationException | IllegalAccessException e){e.printStackTrace();}}}}} } gitee地址 git clone https://gitee.com/seek6174/spring-seek.git
http://www.hkea.cn/news/14357991/

相关文章:

  • 注册网站显示lp或设备超限怎么办用jsp做网站的技术路线
  • 做网站哪家最好WordPress网络超时
  • 网站建设的目的及目标嘉兴网站建设方案服务
  • 无棣县建设局网站网站建设基本内容
  • 购物网站成品惠州网站设计哪家好
  • 伍佰亿网站怎么做2022新闻热点10条
  • lamp 网站建设论文收费网站空间
  • 网站后台报表统计系统js 上传wordpress
  • 网站毕业设计选题求个网站知乎
  • 怎样设网站wordpress wp polls
  • wordpress类似的网站python基础教程入门
  • 武昌做网站公司推荐怎么做网上卖货
  • 网站开发框架的工具网站建设所需服务器
  • 金融企业网站建设公司房地产网站建设内容
  • 企业门户网站页面模板常州微信网站建设
  • 网站有源码之后怎么建设网站怎样做英文网站
  • 网站软文推广范文分销系统平台有哪些
  • 免费建设一个可以访问的网站南通的网站建设
  • 网站手机版方案竞价 推广
  • 网站开发待遇好吗响应式网站的宽度
  • 课程网站建设的财务分析电力建设期刊 网站无法访问
  • 群晖nas做网站软件推广方法
  • 服务器搭建网站软件西宁做网站治愈君博i
  • 集团网站设计思路好看的网站建设
  • 金融建设网站wordpress页面加载动画插件
  • 自己有域名要怎么制作网站管件网络销售怎么找客户
  • 首次进入网站时给一个alert怎么做互联网网站开发的未来方向
  • 移动 网站模板建设网站需要的资源
  • 河南网站推广怎么做做网站搭建服务器要多少钱
  • 微网站怎么做的好公司查询网全国企业信息查询官网