3.IOC容器

Ansys Zemax与Speos协同设计:HUD系统从光学优化到驾驶模拟的全流程解析 本文详细解析了如何利用Ansys Zemax与Speos这对“黄金搭档”进行HUD系统的协同设计。流程始于Zemax进行核心光学架构与像差优化,奠定性能基础;随后将设计无缝导入Speos,通过HUD光学分析模块进行量化验证;最终在虚拟驾驶环境中进行沉浸式模拟,评估实际视觉体验与系统集成效果,实现从光学优化到驾驶模拟的全流程闭环。 阅读详情

ioc容器

三种配置方式

  1. XML:最基本,最完整、强大

  2. 注解(Annotation),@Sine 2.5

    1. 疑问:基于注解,怎么读取<context:component-scan base-package="com.xxx"/> 并去扫描,初始化有此类的bean? 会用到自定义空间解析
    2. 常用几种注解
      1. @Componet 通用型
      2. @Controller controller层
      3. @Service service层
      4. @Repository dao层
      5. @Autowired 默认byType注入
      6. @Resource JSR,默认byName注入
  3. Java配置, @Sine 3.0

  4. 理解:

    基于XML功能强大,但是与代码分开了,感觉编写起来麻烦,基于注解和Java配置,让配置像写代码一样,易于理解和维护,但是可能缺失了部分功能.无论使用哪种方式,最终达到的效果是一样的,即会统一转化为Spring BeanDefinition等配置。

依赖注入

自定义属性解析器

  1. 定义bean

    package com.desmond.springlearning.customproperty;
    
    import java.util.Date;
    
    /**
    * @author presleyli
    * @date 2018/9/11 下午10:04
    */
    public class UserBean {
       private Date birthday;
    
       public Date getBirthday() {
           return birthday;
       }
    
       public void setBirthday(Date birthday) {
           this.birthday = birthday;
       }
    }
    
  2. 定义解析器

    package com.desmond.springlearning.customproperty;
    
    import java.beans.PropertyEditorSupport;
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Locale;
    
    /**
    * @author presleyli
    * @date 2018/9/11 下午10:04
    */
    public class DatePropertyEditor extends PropertyEditorSupport{
       @Override
       public void setAsText(String text) throws IllegalArgumentException {
           try {
               DateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
    
               this.setValue(df.parse(text));
           } catch (ParseException e) {
               e.printStackTrace();
           }
       }
    }
    
  3. 配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "
           default-autowire="default">
    
      <bean id="userBean" class="com.desmond.springlearning.customproperty.UserBean">
          <!-- 时间属性,需要属性编辑器 -->
          <property name="birthday" value="2017-11-26"/>
      </bean>
    
       <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
           <property name="customEditors">
               <map>
                   <entry key="java.util.Date" value="com.desmond.springlearning.customproperty.DatePropertyEditor"/>
               </map>
           </property>
       </bean>
    </beans>
  4. 测试

    package com.desmond.springlearning.customproperty;
    
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
    * @author presleyli
    * @date 2018/9/11 下午10:11
    */
    public class Test {
       public static void main(String[] args) {
           BeanFactory factory = new ClassPathXmlApplicationContext("customproperty/applicationContext.xml");
           UserBean ub = factory.getBean(UserBean.class);
    
           System.out.println(ub.getBirthday());
       }
    }
  5. 输出

    Sun Nov 26 00:00:00 CST 2017
  6. 大概原理:

    Spring 会内置一些字面量的解析器,比如把字符串"2"转化成整数2. 也会根据用户的需求,填充自定义属性,过程如下
    

    流程图

循环依赖(构造器)

描述

​ A 依赖 B, B 也依赖 A:

public Class Bar {
    private Foo foo;

    public Bar(Foo foo) {
        this.foo = foo;
    }

    // setter and getter
}

public Class Foo {
    private Bar bar;

    public Foo(Bar bar) {
        this.bar = bar;
    }

    // setter and getter
}

运行时,抛出BeanCurrentlyInCreationException.

解决

​ 容器创建A(提早曝光,这时只是 A a = new A(), a只是最原始的实例,没有装配任何属性) -> 发现需要依赖B -> new B(a) -> 发现需要实例a, 因为 a 已经提早曝光了,所以能够拿到这个最原始的实例,完成B的实例 b的创建(是先new B(),然后setA,还是直接 new B(a)?) -> 返回实例 b -> a.setB(b) -> 结束.

重写Bean定义

​ 两种重写机制:配置元素 和 容器级别

配置元素

​ 利用配置元素的先后顺序,相同的bean name, 后面的会覆盖前面的

基于Java配置
  1. 两个配置类(同一配置类里,bean name唯一)

    package com.desmond.springlearning.bean_name_override;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * @author presleyli
     * @date 2018/9/13 上午4:18
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Foo {
        private String name;
    }
    
    package com.desmond.springlearning.bean_name_override;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @author presleyli
     * @date 2018/9/13 上午4:18
     */
    @Configuration
    public class ConfigurationBean1 {
        @Bean
        public Foo foo1() {
            return new Foo("foo1 from b1");
        }
    
        @Bean
        public Foo foo2() {
            return new Foo("foo2 from b1");
        }
    
    package com.desmond.springlearning.bean_name_override;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    /**
     * @author presleyli
     * @date 2018/9/13 上午4:18
     */
    @Configuration
    public class ConfigurationBean2 {
        @Bean
        public Foo foo1() {
            return new Foo("foo1 from b2");
        }
    
        @Bean
        public Foo foo2() {
            return new Foo("foo2 from b2");
        }
    }
    
    1. 测试类
    package com.desmond.springlearning.bean_name_override;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    /**
    * @author presleyli
    * @date 2018/9/13 上午4:20
    */
    public class Test {
       public static void main(String[] args) {
           AnnotationConfigApplicationContext applicationContext
                   = new AnnotationConfigApplicationContext(ConfigurationBean1.class, ConfigurationBean2.class);
    
           Foo foo = applicationContext.getBean("foo1", Foo.class);
           System.out.println(foo.getName());
       }
    }
    1. 结果
    foo1 from b2
基于XML配置
  1. 连个配置文件(同一配置文件,beanName唯一)

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "
          default-autowire="default">
    
       <bean id="foo" class="com.desmond.springlearning.bean_name_override.Foo" p:name="I'm foo from config1."/>
    </beans>
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
          xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "
          default-autowire="default">
    
       <bean id="foo" name="foo2" class="com.desmond.springlearning.bean_name_override.Foo" p:name="I'm foo from config2."/>
    </beans>
  2. 测试类

    package com.desmond.springlearning.bean_name_override;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
    * @author presleyli
    * @date 2018/9/13 上午4:20
    */
    public class Test2 {
       public static void main(String[] args) {
           ApplicationContext applicationContext
                   = new ClassPathXmlApplicationContext(new String[]{
                   "bean_name_override/applicationContext2.xml",
                   "bean_name_override/applicationContext1.xml"
    
           });
    
           Foo foo = applicationContext.getBean("foo", Foo.class);
           System.out.println(foo.getName());
       }
    }
    
  3. 结果

    I'm foo from config1.

容器级别

​ 不同的容器,可以存在同名的bean, 比如child container与parent container.

天龙八部源码深度解析:从宠物系统到副本机制(C++游戏开发实战) 本文深度解析《天龙八部》源码架构,重点剖析宠物系统状态机实现与副本动态加载机制等核心模块。通过C++代码示例展示宠物AI状态迁移逻辑和副本场景管理技术,为现代游戏开发提供兼容性改造方案与设计启示。适合游戏开发者学习经典MMORPG的工程化实现路径。 阅读详情

相关推荐

CTF-MISC:BUUCTF练习汇总(1-25题,不包括签到题)

解题思路:该题比较基础,wireshark打开过滤HTTP流量包,追踪HTTP流后可以看到base64密文,解密后得到jpg图片,打开图片即可看到flag,在线OCR识别即可提取出flag值。解题思路:zip压缩包解压需要密码,图片中的盲文为解压的密码,解压后得到MP3音频文件,内容为典型的摩斯密码;解题思路:由题目可以为LSB隐写,使用StegSolve打开图片查看最低有效位得到PNG信息,另存为图片后发现是二维码,扫描后即可得到flag。对应摩斯电码为:-.-. - …-. .-- .–. . …

燕麦葡萄干的博客 1万+

2024已过半,还没试过在vue3中使用ioc容器吗?

那么,如果搬砖累了,就玩一玩支持ioc容器的vue3框架吧,尝试一下全新的开发体验。濮水大叔引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构。

sdgfafg_25的博客 857

水文地质人必备:用Origin Pro 2023手把手教你搞定Piper三线图(附数据模板)

本文详细介绍了如何使用Origin Pro 2023绘制专业级Piper三线图,适用于水文地质数据分析。从数据准备、百分比计算到图表参数设置,提供全流程指导,并附赠数据模板和样式预设文件,帮助用户快速掌握这一水文地球化学分析的核心工具。

weixin_30568591的博客 533

加油,为Vue3提供一个可媲美Angular的ioc容器

为什么要为Vue3提供ioc容器 Vue3因其出色的响应式系统,以及便利的功能特性,完全胜任大型业务系统的开发。但是,我们不仅要能做到,而且要做得更好。大型业务系统的关键就是解耦合,从而减缓shi山代码的生长。而ioc容器是目前最好的解耦合工具。Angular从一开始就引入了ioc容器,因此在业务工程化方面一直处于领先地位,并且一直在向其他前端框架招手:“我在前面等你们,希望三年后能再见”。那么...

weixin_36976343的博客 421

链路聚合Eth-trunk以及华为交换机配置实例

链路聚合简介 以太网链路聚合Eth-Trunk简称链路聚合,它通过将多条以太网物理链路捆绑在一起成为一条逻辑链路,从而实现增加链路带宽的目的。同时,这些捆绑在一起的链路通过相互间的动态备份,可以有效地提高链路的可靠性。 目的: 随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出越来越高的要求。在传统技术中,常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够灵活。 采用链路聚合技术可以在不进行硬件升级的条件下,通过将多个物理接口捆绑为一个逻辑接口

ChaseAug的博客 2万+

玄机-Linux权限维持-后门

玄机-Linux权限维持-后门

m0_46439803的博客 765

3、IOC 容器

3、IOC 容器 3.1 IOC(Inversion of Control 概念和原理) 3.1.1 什么是 IOC ? (1)控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理 (2)使用IOC目的:为了耦合度降低 (3)做入门案例就是IOC实现 3.1.2 IOC 底层原理 xml解析、工厂模式、反射 3.1.3 画图讲解IOC底层原理 3.2 IOC 接口 (1)IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂 (2)Spring提供IOC容器实现两种方式:(两个接口

CoderJay 218

汽车零部件产线实战:C#上位机+YOLO实现螺栓装配到位视觉检测

本项目基于C#上位机+YOLOv8实现汽车零部件产线螺栓装配到位视觉检测,全程贴合产线实际场景,从硬件选型、安装调试,到模型训练、上位机开发,再到项目联调、优化扩展,均提供手把手实操指导,代码可直接复制使用,规避了工业视觉产线检测的高频踩坑点。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1332

3、Spring 之IOC 容器 详解

IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。

一切总会归于平淡 2480

SAP 系统和银行系统通过 SM2 加密算法进行集成

SM2 是基于椭圆曲线离散对数问题(ECDLP)的一种公钥密码算法。椭圆曲线加密的核心原理,是利用了一个数学难题:在椭圆曲线群上,已知曲线上两点的运算结果,逆向推导出这两个点的具体信息是非常困难的。这样的复杂度使得基于椭圆曲线的密码体制比传统的 RSA 更加难以破解。在 SM2 加密中,公钥和私钥的生成与传统的椭圆曲线加密类似。选择一个椭圆曲线和一个基点 P。使用私钥 d,计算公钥 P’ = d * P。私钥 d 保密,而公钥 P’ 可公开分发,用于加密数据。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1212

第201期 解锁科研效率新高度:Claude 科学技能插件(claude-scientific-skills)深度体验

科研AI助手Claude Scientific Skills开源工具为Claude大模型扩展科学能力,覆盖数据可视化、数学计算、学术格式处理等科研全流程需求。该插件支持LaTeX公式生成、自动化科研图表绘制、学术文档规范校正等功能,让研究人员通过自然语言指令即可完成专业任务。项目开源可定制,支持特定学科需求扩展,目前已托管于GitHub。使用门槛低,只需配置Claude API密钥即可快速启用,帮助科研人员从繁琐技术细节中解放,聚焦核心研究创新。

全网120W+关注AI拉呱,专注人工智能以及科技前沿! 1359

3、IoC容器

3、容器:IoC原理 IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。 Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。我们将由 IoC 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建的 Java 对象没有任何区别。 IoC 容器是 Spring 框架中最重要的核心组件之一,

Hang-的博客 436

Yolov8-pose关键点检测:训练实战篇 | 手部关键点检测

yolo8-pose实战检测手部关键点并优化。

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 3396

3-Spring IoC容器概述

文章目录1. Spring IoC依赖查找1.1 根据Bean名称查询1.2 根据Bean类型查找1.3 根据Bean名称和类型查找1.4 根据Java注解查找 参考:小马哥讲Spring核心编程思想 1. Spring IoC依赖查找 1.1 根据Bean名称查询 实时查找 延时查找 1.2 根据Bean类型查找 单个Bean对象 集合Bean对象 1.3 根据Bean名称和类型查找 1.4 根据Java注解查找 单个Bean对象 集合Bean对象 ...

tobebetter9527的博客 390

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Spring3.1.3 Ioc在Web容器中的建立

Spring3.1.3  Ioc在Web容器中的建立

zhenyaoMilenfan的专栏 333

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

《SpringBoot 3:入门与应用实战》第 3 章 IOC 容器中的 Bean 阅读笔记 3

《SpringBoot 3:入门与应用实战》第 3 章 IOC 容器中的 Bean 阅读笔记 3

道友 239

四 WPF-IOC框架第3.5讲之完善容器

【代码】四 WPF-IOC框架第3.5讲之完善容器。

Major_S的博客 422

Spring6 第3章——容器:IoC

Spring6 第3章——容器:IoC

weixin_74019079的博客 1497

Spring 学习笔记3 —— IOC容器 3 (使用注解配置IOC容器)

传送门——>官方文档 这里我做的这份笔记的意义仅仅是记录下自己初涉Spring的历程,既不是对官方API的深入解释,也不一定是对新手友好的、知识点详尽的一份学习清单。 综上,不喜勿喷,但是有问题欢迎评论区交流! 文章目录1 Spring IoC容器和Bean简介 1 Spring IoC容器和Bean简介 注解在配置Spring上比XML更好吗? ...

SongyangJi 519

Spring 6: 3容器-Ioc

FactoryBean是Spring提供的一种整合第三方框架的常用机制。和普通的bean不同,配置一个FactoryBean类型的bean,在获取bean的时候得到的并不是class属性中配置的这个类的对象,而是getObject()方法的返回值。通过这种机制,Spring可以帮我们把复杂组件创建的详细过程和繁琐细节都屏蔽起来,只把最简洁的使用界面展示给我们。将来我们整合Mybatis时,Spring就是通过FactoryBean机制来帮我们创建SqlSessionFactory对象的。/*

jianjiange1的博客 1140

Spring二次学习——3.ioc容器的概念

2.2.1 IoC容器的概念 IoC容器就是具有依赖注入功能的容器,IoC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。应用程序无需直接在代码中new相关的对象,应用程序由IoC容器进行组装。在Spring中BeanFactory是IoC容器的实际代表者。 Spring IoC容器如何知道哪些是它管理的对象呢?这就需要配置文件,Spring IoC容器通过读取配置文件中的...

微微安的博客 553

《SpringBoot 3:入门与应用实战》第 3 章 IOC 容器中的 Bean 阅读笔记 1

《SpringBoot 3:入门与应用实战》第 3 章 IOC 容器中的 Bean 阅读笔记 1

道友 222

《SpringBoot 3:入门与应用实战》第 3 章 IOC 容器中的 Bean 阅读笔记 5

《SpringBoot 3:入门与应用实战》第 3 章 IOC 容器中的 Bean 阅读笔记 5

道友 375
上一篇: 2.知识点拾遗-轻量级容器和控制反转
下一篇: 杂记-JPA DO
desmond_assis
博客等级 码龄14年 33粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值