11.Bean使用拾遗(一)

跟着Synopsys报告,一步步拆解车规芯片FMEDA计算(含公式与避坑点) 本文详细解析了车规芯片FMEDA计算的全流程,基于Synopsys报告拆解实战指南,涵盖基础失效率建模、安全机制效能评估及安全指标合成等关键步骤。通过公式解析、数据准备清单和避坑点分享,帮助工程师掌握ISO26262标准下的硬件量化分析技术,提升车载系统设计可靠性。 阅读详情

11.Bean使用拾遗(一)

1. 内部bean

<bean id="a" class="com.xxx">
	<properties name="car">
    	<bean class="com.xxx.car" p:name="BMW">
        </bean>
    </properties>
</bean>

2. null值

<bean id="a" class="com.xx">
	<property name="name"><null/></property>
</bean>

3.集合合并,允许子继承父同名集合属性合集

<bean id="parentBoss" class="com.xxx">
	<property name="favorites">
    	<set>
        	<value>看报</value>
            <value>高尔夫</value>
        </set>
    </property>
</bean>

<bean id="chidBoss" class="com.xxx" parent="parentBoss">
	<property name="favorites">
        <set merge="true">
        	<value>爬山</value>
            <value>游泳</value>
        </set>
    </property>
</bean>

4.lookup方法注入

package com.desmond.springlearning.lookup;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Car {
    private String name;
}

package com.desmond.springlearning.lookup;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:16
 */
public interface CarFactory {
    Car getCar();
}

package com.desmond.springlearning.lookup;

import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:22
 */
public class Test {
    public static void main(String[] args) {
        Resource resource = new ClassPathResource("lookup/application.xml");
        XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(resource);

        CarFactory carFactory = (CarFactory)xmlBeanFactory.getBean("carFactory");

        System.out.println(carFactory.getCar().getName());
    }
}

<?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="car" class="com.desmond.springlearning.lookup.Car" p:name="BMW" scope="prototype" />

    <bean id="carFactory" class="com.desmond.springlearning.lookup.CarFactory">
        <lookup-method name="getCar" bean="car"/>
    </bean>

</beans>

5.replace-method(方法替换)

package com.desmond.springlearning.method_replace;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:16
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Car {
    private String name;
}

package com.desmond.springlearning.method_replace;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:33
 */
public class Boss1 {
    public Car getCar() {
        return new Car("BMW");
    }
}


package com.desmond.springlearning.method_replace;

import org.springframework.beans.factory.support.MethodReplacer;

import java.lang.reflect.Method;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:33
 */
public class Boss2 implements MethodReplacer{

    public Object reimplement(Object o, Method method, Object[] objects) throws Throwable {
        System.out.println(o); // 目标对象,即boss1的代理对象
        System.out.println(method); // 目标方法,即boss1.getCar
        System.out.println(objects); // 目标方法的参数,即getCar的参数列表

        // 此行会抛出栈溢出错误
        // 原因:o 为 boss1 cglib的代理对象,代理了getCar方法,
        /*
            代理后的getCar 方法,方法体:
            boss2.reimplement(this, method, xxx);
            相当有自己调用自己,死循环.
         */
//        return method.invoke(o, objects);

        return new Car("LUHU.");
    }
}

package com.desmond.springlearning.method_replace;

import com.desmond.springlearning.lookup.CarFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.cglib.core.DebuggingClassWriter;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

/**
 * @author presleyli
 * @date 2018/10/24 下午9:22
 */
public class Test {
    public static void main(String[] args) {
        // 生成spring cglib 代理类文件
        System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "/Users/presleyli/java/desmond/codebase/spring-learning/src/main/java/com/desmond/springlearning/method_replace/clz");

        Resource resource = new ClassPathResource("method_replace/application.xml");
        XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(resource);

        Boss1 boss1 = (Boss1) xmlBeanFactory.getBean("boss1");
        Boss2 boss2 = (Boss2) xmlBeanFactory.getBean("boss2");

        System.out.println(boss1.getCar().getName());
    }
}

<?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="car" class="com.desmond.springlearning.method_replace.Car" p:name="BMW" scope="prototype" />

    <bean id="boss1" class="com.desmond.springlearning.method_replace.Boss1">
        <replaced-method name="getCar" replacer="boss2"/>
    </bean>

    <bean id="boss2" class="com.desmond.springlearning.method_replace.Boss2"/>

</beans>

6. rquest & session作用域

<?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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
       default-autowire="default">

    <bean id="car" class="com.desmond.springlearning.method_replace.Car" p:name="BMW" scope="request" >
        <aop:scoped-proxy/>
    </bean>

    <bean id="boss1" class="com.desmond.springlearning.method_replace.Boss1">
        <property name="car" ref="car"/>
    </bean>

</beans>

此例中,boss1为单例,car,每次http请求都会创建一个新的代理类car.动态代理的逻辑如下:判断当前boss1属于哪个线程下 -> 取出该线程对应的httpSevletRequest -> 从request域中取出car(不存在则先创建) -> 使用;如果作用域为session, 过程如下:判断当前boss1属于哪个线程下 -> 拿到该线程对应的httpSevletRequest -> request.getSession() -> 从session里获取car(不存在则先创建) -> 使用.

  1. FactoryBean

    package com.desmond.springlearning.factory_bean;
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    /**
     * @author presleyli
     * @date 2018/10/24 下午9:16
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public class Car {
        private String name;
        private String slogon;
    }
    
    
    
    package com.desmond.springlearning.factory_bean;
    
    import org.springframework.beans.factory.FactoryBean;
    
    /**
     * @author presleyli
     * @date 2018/10/24 下午10:17
     */
    public class CarFactoryBean implements FactoryBean<Car>{
    
        private String carInfo;
    
        public Car getObject() throws Exception {
            String[] arr = this.getCarInfo().split(",");
    
            return new Car(arr[0], arr[1]);
        }
    
        public Class<?> getObjectType() {
            return Car.class;
        }
    
        public boolean isSingleton() {
            return true;
        }
    
        public String getCarInfo() {
            return carInfo;
        }
    
        public void setCarInfo(String carInfo) {
            this.carInfo = carInfo;
        }
    }
    
    
    
    package com.desmond.springlearning.factory_bean;
    
    import com.desmond.springlearning.lookup.CarFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.core.io.Resource;
    
    /**
     * @author presleyli
     * @date 2018/10/24 下午9:22
     */
    public class Test {
        public static void main(String[] args) {
            Resource resource = new ClassPathResource("factory_bean/application.xml");
            XmlBeanFactory xmlBeanFactory = new XmlBeanFactory(resource);
    
            Car car = (Car)xmlBeanFactory.getBean("car");
            CarFactoryBean carFactory = (CarFactoryBean)xmlBeanFactory.getBean("&car");
    
            System.out.println(car);
            System.out.println(carFactory);
        }
    }
    
    
    <?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="car" class="com.desmond.springlearning.factory_bean.CarFactoryBean" p:carInfo="BMW,被摸我!"/>
    
    </beans>
    
    output:
    十月 24, 2018 10:22:58 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from class path resource [factory_bean/application.xml]
    
    Car(name=BMW, slogon=被摸我!)
    com.desmond.springlearning.factory_bean.CarFactoryBean@2133c8f8
    
    Process finished with exit code 0
    
Lammps实现Ar的沸腾过程(包含in文件) Lammps实现简单的沸腾过程 阅读详情

相关推荐

最新 抖音 X-Gorgon 0408 和8408 设备注册协议

抖音app先是检测了你的手机cpu架构,是x86还是armeabi,通过cpu架构的不同来调用so内不同的xg方法,所以导致现在最新版抖音app的xg算法有0408和8408两种。两种都是最新版,因为我发现当我使用oppo手机安装最新版抖音抓包的xg是8408,而当我用小米或者华为安装最新版抖音,抓包以后发现xg是0408。抖音IOS XG84 设备注册激活协议代码片段。...

Q44804487的博客 1万+

Android WebView H5开发拾遗

上篇介绍了一些WebView的设置,本篇为一些补充项。 首先加载HTML5的页面时,会出现页面空白的现象,原因是需要开启 DOM storage API 功能: webSettings.setDomStorageEnabled(true); 其次,开发中需要注意的安全漏洞,详见《如何设计一个优雅健壮的Android WebView》: @TargetApi(1...

weixin_30879169的博客 129

Keysight ADS新手必看:3分钟搞定TDR模拟的保姆级教程(附差分信号设置技巧)

本文为Keysight ADS新手提供TDR模拟的保姆级教程,详细介绍了从基础环境准备到差分信号设置的全流程。通过内置模板调用、待测器件连接和仿真结果解读,帮助用户快速掌握TDR模拟技术,特别包含差分信号配置技巧,提升信号完整性分析效率。

weixin_30872157的博客 195

(新) Kotlin搞起来 —— 教程引言与目录

作为一个假的Android开发者,并没有通宵去看 Google I/O 2017开发者大会。早上和往常 一样起床坐地铁上班,习惯性掏出手机看看资讯,才知道 Kotlin 成为Android官方编程语言。 得知这一消息后,感到有些兴奋,使用Kotlin也有一年多了,期间写过一个完整项目,现在接手 别人的项目重构也直接上的Kotlin,习惯了Kotlin写代码的简洁,高效,酷炫,写回Java

Coder-Pig的猪栏 18万+

用ST25DV芯片+KiCad快速设计NFC标签天线:参数计算/脚本生成/实测优化全流程

本文详细介绍了使用ST25DV芯片和KiCad工具设计NFC标签天线的全流程,包括参数计算、脚本生成和实测优化。通过解析芯片等效工作原理和设计思路,帮助开发者避开常见陷阱,实现高效、可量产的天线设计。文章还提供了Python计算工具和KiCad自动化脚本,大幅提升设计效率和成功率。

jj890的博客 758

VASP能带计算避坑指南:从CHGCAR读取失败到成功解决的全过程

本文深度解析VASP能带计算中常见的“CHGCAR读取失败”报错,并提供从静态自洽到非自洽计算的全流程避坑指南。核心解决方案包括使用CONTCAR替代POSCAR、调整SYMPREC参数以处理对称性判定问题,并推荐利用vaspkit工具自动化生成输入文件,确保计算流程稳健高效。

weixin_29245767的博客 771

4.工厂模式

文章目录4.工厂模式简单工厂类图优缺点code输出工厂方法类图优缺点code输出抽象工厂类图优缺点code输出 4.工厂模式 简单工厂 类图 优缺点 优点 简单,解耦。 缺点 当需要扩充业务时,需要对BaoziFactory进行修改,当废弃某一产品时,也需要修改factory代码,产品过多,可能导致factory代码过长,冗余度高。 code package com.desmon...

desmond的专栏 530

Unity游戏开发客户端面经——设计模式(初级)

Unity游戏开发客户端面经 之 设计模式 篇

Sea3752的博客 9430

15.观察者模式&发布/订阅模式

文章目录15.观察者模式&amp;发布/订阅模式1. 观察者模式1.概念&amp;优缺点2.类图3.代码2.发布-订阅模式1.概念2. 两个模式最重要的区别3. 差异总结 15.观察者模式&amp;发布/订阅模式 1. 观察者模式 1.概念&amp;优缺点 概念 观察者模式: 1. 在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。 2....

desmond的专栏 520

如何理解Fourier Neural Operator (FNO)

2022年Nvidia发表在arXiv上的的FourcastNet作为几乎是最早的一篇气象大模型的工作(之前Google Research的MetNet主要还是对于降水的预报)。除了Transformer的backbone之外,使用到了2021年发表在ICLR上的Fourier Neural Operator。为了更好的理解模型的理论基础,可以详细学习一下以及他的前期工作GNOFNO作者对这两篇文章的解析blog。

momo的博客 1万+

Calibre DRC

calibre DRC的运行方法,包括merge gds和加用dummy rule加dummy的方法

m0_61544122的博客 1万+

2.知识点拾遗-轻量级容器和控制反转

POJO编程模型 原来的EJB编程模型存在的问题 POJO编程模型的优点 轻量级容器和控制反转 轻量级容器 控制反转 依赖注入 POJO编程模型 原来的EJB编程模型存在的问题 ​ 笨重,业务程序与EJB框架耦合严重,无法在JEE平台之外运行组件,开发-打包-部署-测试流程长且复杂。 POJO编程模型的优点 ​ 简单,轻量,无耦合 轻量级容器和...

desmond的专栏 479

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

14.国际化信息

文章目录14.国际化信息1. 数字格式化2. 日期格式化3. 消息格式化4. 资源化文件5. 动态资源文件4. Spring MessageSource-without Application5. Spring MessageSource-with Application 14.国际化信息 1. 数字格式化 public static void formatNum () { Loc...

desmond的专栏 398

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

3.IOC容器

ioc容器 三种配置方式 依赖注入 自定义属性解析器 循环依赖(构造器) 描述 解决 重写Bean定义 配置元素 基于Java配置 基于XML配置 容器级别 ioc容器 三种配置方式 XML:最基本,最完整、强大 注解(Annotation),@Sine 2.5 疑问:基于注解,怎么读取&lt;context:component-scan base...

desmond的专栏 392

7.高级装配(一)

文章目录7.高级装配(一)1. 环境与Profile1.解决不同环境不同配置2.配置方式2. 条件化bean1. 概念2. 举例 7.高级装配(一) 1. 环境与Profile 1.解决不同环境不同配置 maven构建时,使用profiles来确定将哪一个配置编译到可部署的应用 缺点:不同环境重新构建,可能引入bug 使用Spring profile 2.配置方式 Java 可以...

desmond的专栏 365

6.装配Bean

文章目录6.装配Bean装配方案通过自动化装配通过Java代码装配通过XML装配导入和混合装配 6.装配Bean 装配方案 基于xml 基于java 基于隐式地bean发现与自动装配 通过自动化装配 优点 便利,自动化,可以解决大部分问题 Spring从两个角度来实现自动转配 组件扫描(component scan) xml &lt;context:component-sc...

desmond的专栏 362

10.设计模式&OO原则概览

文章目录10.设计模式&amp;amp;OO原则概览 10.设计模式&amp;amp;OO原则概览 OO基本概念 抽象 封装 继承 多态 OO原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程 为交互对象之间的松耦合而努力 设计原则 找出可能变化的代码,把他独立封装,不要和那些不需要变化的代码混在一起 针对接口编程,而不是针对实现编程 良好的OO设计必须具备三个特性: ...

desmond的专栏 356

16.容器事件

文章目录16.容器事件1. 概念2. Spring事件类结构1. 事件类 `ApplicationEvent`2. 事件监听接口 `ApplicationListener`3. 事件广播 `ApplicationEventMulticaster`3. 实现示例 16.容器事件 1. 概念 Spring的ApplicationContext能够发布事件并且允许注册相应的事件监听器,因此,它拥有一套完...

desmond的专栏 353

21.配置文件读取以及验证(一)

文章目录Resource概述类图Bean加载获取Document类图寻找验证模式(DTD or XSD) Resource 概述 ​ Resource抽象了所有Spring内部使用到的底层资源:File、URL、Classpath等。这接口定义了三个判断短浅资源状态的方法:exists, isReadable, isOpen. 类图 Bean加载 获取Document 类图 ​ 加载docum...

desmond的专栏 348

25.Bean加载过程

文章目录1.BeanFactory v.s. FactoryBean1.BeanFactory2. Bean加载过程 1.BeanFactory v.s. FactoryBean 1.BeanFactory BeanFactory, 即bean工厂,通常用于访问spring容器. FactoryBean,工厂模式,本身为一个bean,用于创建bean,以下是描述 /** * Interface ...

desmond的专栏 330

22.配置文件读取以及验证(二)

文章目录获取Document寻找文档DTD的定义(EntityResolver) 获取Document 寻找文档DTD的定义(EntityResolver) ​ 在验证xml之前,需要找到这个xml的申明文件(DTD or XSD), 在 dtd/xsd + 验证模式的作用下,对xml进行验证. 此dtd/xsd, 通常声明为一网络地址,如果不指定EntityResolver, xml验证器会通过...

desmond的专栏 306

17.内部工作机制

文章目录17.内部工作机制1. 概览图2. 说明 17.内部工作机制 1. 概览图 2. 说明 InstantiationStrategy 负责创建对象,策略模式,参见18.策略模式 BeanWrapper ​ 相当于一个代理器,Spring委托BeanWrapper完成Bean属性的填充工作。在Bean实例被InstrantitationStrategy被创建出来之后,容器主控程序将B...

desmond的专栏 302

23.bean标签的解析及注册

文章目录1. Xml的解析概览1.1 xml解析1.2 xml解析(内)2. bean的解析2.1 默认标签2.2 自定义标签 1. Xml的解析概览 1.1 xml解析 1.2 xml解析(内) 2. bean的解析 2.1 默认标签 2.2 自定义标签 ...

desmond的专栏 280

5.Spring Bean生命周期.md

文章目录5.Spring Bean生命周期生命周期流程图说明总结 5.Spring Bean生命周期 生命周期流程图 说明 *调用InstantitationAwareBeanPostProcessor的postProcessBeforeInstantitation()方法 实例化:Class clazz, custructor或者 newInstance *调用用InstantitaonAw...

desmond的专栏 268

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 284

【项目推荐】基于 SpringBoot3 + Spring AI 的游泳馆管理系统:Agent + RAG + Function Calling 一次学全

它不是玩具 Demo,而是一个「业务 + AI」双主线交织的真实系统——预约业务在跑,AI 客服在旁边实时查库作答,两条线通过 Function Calling、RAG、站内消息串成一体。面试官问「你做过什么 AI 项目」时,你能从业务场景讲到架构取舍,从 RAG 切分参数讲到降级兜底——这和「我调了一下 ChatGPT 的 API」是完全不同的两个段位。项目已包含完整的建表 SQL、初始化数据、部署文档,克隆下来就能跑。获取方式:见文末说明 / 后台回复关键词获取。—— 完 ——

深耕开发,专注编程实战。分享源码解析、项目搭建、问题排查笔记,沉淀技术,持续更新。 347

MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地

无状态,所以任何实例都能处理任何请求,扩容不再需要粘性会话;显式句柄,所以跨调用状态是可审计、可过期的,而不是藏在进程内存里;幂等重放,所以交互式中断在分布式环境下也可恢复,代价是你要自己保证副作用可对账;头部路由,所以网关能在不解析 body 的前提下做治理,而校验 header/body 一致性成了新的安全底线。这些没有一个是在发明新概念。它们是分布式系统里被验证过二十年的老手艺:无状态、显式上下文、幂等、网关治理、fail-fast、可观测。

qq_36021478的博客 127
上一篇: 10.设计模式&OO原则概览
下一篇: 12.Bean使用拾遗(二)
desmond_assis
博客等级 码龄14年 33粉丝 82原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值