`
足至迹留
  • 浏览: 503978 次
  • 性别: Icon_minigender_1
  • 来自: OnePiece
社区版块
存档分类
最新评论

<2> 基本bean装配

阅读更多
本篇只介绍基本的最常用的bean装配知识,高级装配在下篇简要梳理。

在spring中,组件无需自己负责与其他组件的关联,取而代之的是,容器负责把协作组件的引用给予各个组件。创建系统组件之间协作关系的动作是DI的关键,通常被称之为装配。

Spring容器是Spring框架的核心,容器可以创建组件,装配和配置组件,以及管理他们的生命周期(从new()到finalize())。
Spring提供了多种容器实现,并分为两类。一类是Bean工厂(BeanFactory),最简单的容器,提供了基础的依赖注入支持。一类是应用上下文(ApplicationContext),建立在Bean工厂基础之上,提供了系统架构服务,如从属性文件中读取文本信息,向相关的事件监听器发布事件(这两点在下篇bean的高级装配中都会有)。

Spring中有几种BeanFactory的实现,用的最多的是XmlBeanFactory。要使用XmlBeanFactory需要传递一个org.srpringframework.core.io.Resource实例给构造函数,此Resource对象提供xml文件给容器。Spring提供的Resource有下面几种:



如:
BeanFactory factory = new XmlBeanFactory(new FileSystemResource(“c:/bean.xml”));
这行简单的代码告诉Bean工厂从xml文件中读取Bean的定义信息,但是,现在工厂还没有实例化Bean,Bean工厂是延迟加载bean的,只有在需要的时候才加载(后面会看到应用上下文会预加载singleton的bean,除非bean被声明了lazy-init=”true” 或abstract=”true”)。
为了从BeanFactory得到一个Bean,只要简单的调用getBean()方法,把bean的名字当参数传递进去就行了。
MyBean bean = (MyBean)factory.getBean(“myBeanName”);
当调用getBean()方法时,工厂才会实例化Bean,并且使用依赖注入设置bean的属性,这样就在Spring容器中开始了Bean的生命。

由于应用上下文提供了更强的功能,几乎所有的应用系统都选择ApplicationContext而不是BeanFactory.只在资源很少的情况下才会考虑采用BeanFactory,如移动设备上。
在ApplicationContext的诸多实现中,有三个实现经常用到:
1)ClassPathXmlApplicationContext,从类路径中的xml文件载入上下文定义信息。
2)FileSystemXmlApplicationContext, 从文件系统中的xml文件载入上下文信息。
3)XmlWebApplicationContext,从web系统中的xml文件载入上下文信息。

使用举例:
ApplicationContext ctx = new ClassPathXmlApplicationContext(“applicationContext.xml”);

ApplicationContext ctx = new FileSystemXmlApplicationContext(“c:/applicationContext.xml”);
两者区别是FileSystemXmlApplicationContext只能在指定的路径中寻找applicationContext.xml文件,而ClassPathXmlApplicationContext可以在整个类路径(包括jar文件)中寻找xml文件。
然后可以向BeanFactory一样通过getBean()获取bean,因为ApplicationContext接口扩展自BeanFactory接口。
应用上下文和bean工厂的另一个重要区别是:Bean工厂延迟加载所有的bean,直到getBean()被调用才创建bean,而应用上下文启动后会预载入所有的单实例bean, 除非bean被声明了lazy-init=”true” 或abstract=”true”.

下图是Bean在BeanFactory中的生命周期:



Bean在应用上下文中的生命周期跟上面只有一点不同:



唯一的不同是,如果bean实现了ApplicationContextAware接口,setApplicationContext()方法会被调用。

在xml中声明bean.
<bean id=”duke” class=”com.spring.Juggler” />
<bean>元素是Spring中最基本的配置单元,它通知spring创建一个bean对象。当spring容器装载该bean时,将用默认的构造函数实例化。
其中,id属性定义了该bean的名称,class属性指明了bean的类型。还可以定义:
<bean name=”duke” class=”com.spring.Juggler” />

注:bean的id和name的区别
1)id必须符合xml命名规范,不能以数字,符号开头,不能有空格。name无限制。
2)id不能有重复,否则初始化会报错,name可以重复,后面的会覆盖前面的。
3)name可以用逗号(,)隔开,每个名称都可用,如:
   <bean name=”aa,bb,cc” class=”…”  />
   则:getBean(“aa”); 或getBean(“bb”);或getBean(“cc”)都一样。
4)id和name都不指定,则以类全名为name.如果有多个不指定name和id的匿名bean,且类名一样,如:
<bean class=”com.spring.Test” />
<bean class=”com.spring.Test” />
<bean class=”com.spring.Test” />
则:getBean(“com.spring.Test”);取的是第一个,
getBean(“com.spring.Test#1”);取的是第二个,
getBean(“com.spring.Test#2”);取的是第三个。
综上:建议使用id,不要使用name.


Bean的属性注入方式:
1. 构造函数注入(使用constructor-arg)
如:
<bean id=”aa” class=”…”>
  <constructor-arg  value=”15” />  ----int型的15,基本类型可以自己转换,使用value设置。
  <constructor-arg  value=”string-15” /> ----string类型的15,基本类型可以自己转换,使用value设置。
<constructor-arg  ref=”otherbean” /> ----使用ref引用其他定义好的bean.
</bean>

注:与ref类似还可以使用idref属性来指定要引用的bean的名称,但两者完全不一样,idref提供的是类似value的功能,只是引用的普通字符串,但是有校验功能,而ref是引用的真实的bean,但idref比value多了验证功能。此外,idref和ref都有三个属性,分别是parent,local和bean。
还可以参考:http://taoyang168.blog.163.com/blog/static/126505069201232533626413/

有些时候,容器在加载XML配置的时候,因为某些原因,无法明确配置项与对象的构造方法参数列表的一一对应关系,就需要 请<constructor-arg>的type或者index属性出马。比如,对象存在多个构造方法,当参数列表数目相同而类型不同的时 候,容器无法区分应该使用哪个构造方法来实例化对象,或者构造方法可能同时传入最少两个类型相同的对象。
如:
<bean id="mockBO" class="..MockBusinessObject">
<constructor-arg type="int">
    <value>111111</value>
</constructor-arg>
</bean>

<bean id="mockBO" class="..MockBusinessObject">
<constructor-arg index="0" value="11111"/>
<constructor-arg index="1" value="22222"/>
</bean>

2. setter注入
如:
<bean id=”aa” class=”…” >
<property name=”song” value=”lalala” />
<property name=”instrument” ref=”piano” />
</bean>
注:Spring容器返回bean实例的过程:初始化主调bean->初始化依赖bean->将依赖bean注入到主调bean中->返回完整的主调bean实例。
还可以参考:http://blog.csdn.net/jbuilder3/article/details/5413300

注入内部bean:
<bean id=”aa” class=”…” >
<property name=”song” value=”lalala” />
<property name=”instrument”>
<bean class=”org.srping.Saxophone” />
    </property>
</bean>
内部bean也可以在构造函数注入方式中使用。内部bean只能用来注入,不能用来被其他bean引用。

3. 工厂方法注入(factory-method,允许使用指定的static方法来创建实例而不是使用构造函数)
在后面高级bean装配时会介绍。
还可以参考:
http://blog.sina.com.cn/s/blog_5f1fe33f0100hyx7.html
http://www.360doc.com/content/07/0327/13/18042_416050.shtml

装配集合
前面介绍了基本属性(通过value)和其他类(通过ref),但value和ref只有在属性是单一的时候才有效,当属性是复数(就是集合)时spring提供了4个类型的集合配置元素
<list> 装配一列值,允许重复
<set> 装配值集,确保无重复
<map> 装配键值对的集合,名称和值可以是任意类型
<props> 装配键值对的集合,名称和值都是string类型
<list>和<set>可以不经修改而使用任何collection上,两个元素可以与任意类型java.util.Collection中的属性交换。
如:
<property name=”instruments”>
<list>
    <value>第一个元素</value>
    <ref bean=”guitar” />
<ref bean=”cymbal” />
<ref bean=”harmonica” />
</list>
</property>
<list>可以用在以下代码上照常工作:
java.util.List<Instrument> instruments;  或者
Instruments[ ] instruments; 或者
Collection<Instrument> instruments;

可以在用到<list>的地方换成<set>,区别是<set>可以保证元素唯一。即使配置了重复元素,使用时仍是保持无重复的元素存在。

<property name=”instruments”>
<map>
    <entry key=”guitar” value-ref=”guitar” />
<entry key=”cymbal” value-ref=”cymbal” />
</map>
</property>
每个entry有两个属性,一个是key,另一个是value.分别有两个属性可以用:
key 指定map的键为string
key-ref 指定键为其他bean的引用
value 指定map的值为string
value-ref 指定map的值为其他bean的引用

<property name=”instruments”>
<props>
    <prop key=”guitar”>I am guitar.</prop>
<prop key=”cymbal”>I am cymbal.</prop>
</props>
</property>

还可以显式的给属性装配null值.如:
<property name=”properynull”><null/></property>
区别:
bean.setMail(“”)  -> <value></value>
bean.setMail(null)  -> <value><null/></value>

自动装配的4种方式:
1) byName 在容器中寻找和需要自动装配的属性名相同的bean,如果没找到则没有被装配上。
2) byType 在容器中寻找一个与需要自动装配的属性类型相同(子类型可以自动向上转型为父类型)的bean,如果没找到则没有被装配。如果找到超过一个类型相同的bean,则会抛出UnsatisfiedDependencyException异常。
3) constructor 在容器中查找与需要自动装配的bean的构造函数参数一致的一个或多个bean,如果窜在不确定的bean或构造函数,则抛出UnsatisfiedDependencyException异常。
4) autodetect 首先尝试使用constructor来自动装配,然后使用byType方式。

如下的配置
<bean id=”kenny” class=”…” >
<property name=”song” value=”Jingle” />
<property name=”instrument” ref=”saxophone” />
</bean>
可以使用自动装配的写法:
<bean id=”instrument” class=”com.Instrument” />
<bean id=”kenny” class=”…” autowire=”byName”>
<property name=”song” value=”Jingle” />
</bean>

Spring的bean有一个autowire的属性,它可以为以下的6个值:
1、No:即不启用自动装配。Autowire默认的值。 
2、 byName: 通过属性的名字的方式查找JavaBean依赖的对象并为其注入。比如说类Computer有个属性printer,指定其autowire属性为 byName后,Spring IoC容器会在配置文件中查找id/name属性为printer的bean,然后使用Seter方法为其注入。 
3、 byType: 通过属性的类型查找JavaBean依赖的对象并为其注入。比如类Computer有个属性printer,类型为Printer,那么,指定其 autowire属性为byType后,Spring IoC容器会查找Class属性为Printer的bean,使用Seter方法为其注入。 
4、 constructor:通byType一样,也是通过类型查找依赖对象。与byType的区别在于它不是使用Seter方法注入,而是使用构造子注入。 
5、 autodetect:在byType和constructor之间自动的选择注入方式。 
6、 default:由上级标签<beans>的default-autowire属性确定 

一般都是使用byName。
注:自动装配可以减少配置xml,但最大的缺点就是缺乏透明,隐藏了很多细节。建议使用手动装配。
使用<property>和<constructor-arg>配置总会覆盖自动装配的bean。

关于注解Autowired和Resource的作用和区别,源码级分析非常好:
http://www.iflym.com/index.php/code/201211070001.html

Bean的范围(scope)



Bean的初始化和销毁

在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种:
第一种:通过@PostConstruct 和 @PreDestroy 方法实现初始化之后和销毁bean之前进行的操作。这是一种注解的写法。
第二种是:通过 在xml的bean定义中使用init-method 和  destory-method方法。还可以在<beans>的顶层配置中使用default-init-method和default-destroy-method来指定一个上下文定义文件中所有bean的初始化方法和销毁方法。
如:<bean id="personService" class="com..beanscope.PersonService" scope="singleton"  init-method="init"  destroy-method="cleanUp" /> 
注:非singleton的bean即使指定destroy-method也不会执行,对于prototype类型的bean一旦bean生成之后,spring容器就不管它的消亡了。
第三种是: 通过java bean实现InitializingBean和 DisposableBean接口,要分别实现afterPropertiesSet()方法和destroy()方法。这种通过实现接口的方式与spring框架存在耦合性,建议使用前两种方式。
这三种方式如果同时存在,则一个bean初始化执行顺序是:
Bean的构造函数Construct->@PostConstruct->InitializingBean->init-method.

可以使用init-method和destroy-method属性来指定bean初始化和销毁要做的动作。

此外,上面所有的xml配置都可以使用注解来完成,可以参考:
http://developer.51cto.com/art/201104/255395.htm

  • 大小: 115.7 KB
  • 大小: 246.9 KB
  • 大小: 227.6 KB
  • 大小: 112.4 KB
分享到:
评论

相关推荐

    金属腐蚀仿真:基于浓度迁移与损伤方程的Python实现及其应用

    内容概要:本文将金属腐蚀现象比作游戏角色受到持续伤害(debuff),并采用浓度迁移和损伤方程来建模这一过程。文中首先介绍了浓度迁移的概念,将其比喻为游戏中使角色持续掉血的毒雾效果,并展示了如何利用Numpy矩阵存储浓度场以及通过卷积操作实现浓度扩散。接着引入了损伤方程,用于评估材料随时间累积的损伤程度,同时考虑到材料自身的抗性特性。作者还提供了完整的Python代码示例,演示了如何在一个二维网格环境中模拟24小时内金属表面发生的腐蚀变化,最终得到类似珊瑚状分形结构的腐蚀形态。此外,文章提到可以通过调整模型参数如腐蚀速率、材料抗性等,使得模拟更加贴近实际情况。 适合人群:对材料科学、物理化学感兴趣的科研工作者和技术爱好者,尤其是那些希望通过编程手段深入理解金属腐蚀机制的人群。 使用场景及目标:适用于希望借助数值模拟方法研究金属腐蚀行为的研究人员;可用于教学目的,帮助学生更好地掌握相关理论知识;也可作为工程项目前期评估工具,预测不同条件下金属构件可能遭受的腐蚀损害。 阅读建议:由于文中涉及较多数学公式和编程细节,建议读者具备一定的Python编程基础以及对线性代数有一定了解。对于想要进一步探索该领域的学者来说,可以尝试修改现有代码中的参数设置或者扩展模型维度,从而获得更丰富的研究成果。

    斐讯丽江大数据产业园项目土石方平场工程开挖施工方案改.doc

    斐讯丽江大数据产业园项目土石方平场工程开挖施工方案改.doc

    无线通信发展历程.doc

    无线通信发展历程.doc

    教务管理系统软件项目计划任务书.doc

    教务管理系统软件项目计划任务书.doc

    数据库系统概论培训课件.pptx

    数据库系统概论培训课件.pptx

    信捷XC PLC与西门子V20变频器通讯程序:原创可直接用于生产的程序(带注释、触摸屏程序及接线设置说明,采用轮询方式,稳定可靠) · PLC

    内容概要:本文详细介绍了信捷XC3 PLC与三台西门子V20变频器之间的通讯程序,涵盖硬件连接、参数设置、PLC程序核心代码以及触摸屏程序。文中提供了详细的接线方法、参数配置步骤、通讯地址说明,并分享了实际操作中的经验和常见问题解决方案。程序采用轮询方式,确保通讯稳定可靠,适用于工业自动化生产线。 适合人群:从事工业自动化领域的工程师和技术人员,特别是对PLC和变频器通讯感兴趣的读者。 使用场景及目标:①帮助工程师快速搭建稳定的PLC与变频器通讯系统;②提供详细的参数设置指导,避免常见的配置错误;③分享实际项目经验,提高系统的稳定性和可靠性。 其他说明:本文不仅提供了理论知识,还包含了大量实战经验和技巧,如终端电阻的正确使用、频率设定的注意事项等,有助于读者更好地理解和应用相关技术。

    新版计算机试题库.doc

    新版计算机试题库.doc

    基于截断核范数张量鲁棒主成分分析.zip

    基于截断核范数张量鲁棒主成分分析.zip

    基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)

    基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目),个人经导师指导并认可通过的高分设计项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业、毕业设计的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(高分项目)基于机器学习的银行客户产品认购预测项目Python源码及全套资料(

    C#标签打印控制系统:支持条形码二维码的高效二次开发工具

    内容概要:本文介绍了一款基于C#的标签打印控制系统,旨在为企业提供灵活、高效的标签打印解决方案。系统不仅支持标签的编辑,还能够自动生成条形码和二维码,并允许用户自定义其位置和样式。此外,系统集成了自动打印功能,确保高质量的标签输出。该系统的模块化设计使其易于二次开发和扩展,适用于多个行业的应用场景,如物流、零售和生产线管理。文中详细介绍了系统的架构、核心功能以及实际应用案例,展示了其实用性和灵活性。 适合人群:对C#有一定了解的技术人员,尤其是需要开发或改进标签打印系统的开发人员。 使用场景及目标:① 需要在现有系统中集成标签打印功能的企业;② 希望定制化标签打印解决方案的中小企业;③ 对条形码和二维码有特殊需求的应用场景。 阅读建议:本文提供了详细的系统架构和技术实现细节,建议读者结合自身需求,重点关注二次开发和扩展部分,以便更好地利用该系统解决实际问题。

    小区物业管理系统及10大UML模型图设计

    小区物业管理系统是一款基于.NET平台开发的软件应用,用于全面管理住宅小区的日常运营。它通过多种功能提升物业管理效率、优化服务质量,并促进业主与物业之间的沟通。在设计过程中,该系统采用了UML(统一建模语言)来确保其结构化和可维护性。UML是一种标准化的建模工具,通过图形化方式描述系统的结构与行为,帮助开发者理解和实现复杂的软件项目。 本项目涵盖了UML的十大模型图,包括用例图、类图、对象图、序列图、协作图、状态图、活动图、组件图、部署图和包图。这些模型图从不同角度描绘系统,例如用例图展示参与者(如业主、物业人员)与系统功能的交互;类图定义系统中的类、接口及其关系;对象图是类图的实例;序列图和协作图描述对象间的动态交互;状态图和活动图关注行为变化;组件图和部署图关注物理结构;包图则用于组织模块结构。 压缩包中的“杨平.doc”可能是设计者或项目负责人杨平的工作文档,包含项目需求、设计思路等重要信息。“任务书.doc”应明确项目的具体任务要求,如功能需求和性能指标。“小区物业管理系统.mdl”是UML模型文件,记录了系统的详细设计。“小区物业”可能是其他相关文件,如源代码或数据库脚本。整个项目提供了从需求分析到系统实现的完整流程,对于学习.NET开发和理解UML建模技术具有重要参考价值。开发者通过研究这些模型图,能够更好地构建类似的物业管理系统,提升软件工程实践能力。

    基于TMS320F28069的伺服驱动器设计方案与代码解析

    内容概要:本文详细介绍了基于TMS320F28069的伺服驱动器设计方案及其实际应用。首先,文章展示了完整的硬件设计,包括控制板、驱动板、电源板和滤波板的具体构造和功能特点。其次,深入探讨了控制源代码的关键部分,如PWM配置、磁场定向控制(FOC)算法以及ADC校准等。文中还特别提到了一些优化技巧,如降低开关损耗、减少寄生电感和提高电磁兼容性的具体措施。最后,强调了该方案的实际量产经验和调试过程中遇到的问题及解决方案。 适合人群:具有一定嵌入式系统和电机控制基础的研发人员和技术爱好者。 使用场景及目标:适用于希望深入了解TMS320F28069在伺服驱动器中的应用,掌握其硬件设计和软件编程技巧的人群。目标是帮助读者理解并能够独立开发类似的伺服控制系统。 其他说明:由于代码注释较少,建议初学者先从官方例程入手,逐步过渡到复杂项目的学习。同时,为了更好地理解和调试,推荐配备必要的测试设备如红外热像仪和逻辑分析仪。

    麦格米特电子凸轮追剪曲线生成算法程序

    内容概要:本文详细介绍了电子凸轮追剪曲线生成算法的原理、应用以及在麦格米特品牌下的实现方法。电子凸轮追剪曲线生成算法主要用于控制机械设备的运动轨迹,在自动化生产线中尤其重要。文中解释了该算法的数学基础和编程逻辑,展示了如何通过确定追剪曲线的形状和运动轨迹来生成电子凸轮的运动指令。此外,还提供了麦格米特品牌的PLC编程环境和工具的具体实现步骤,并附有简化的伪代码示例。 适合人群:从事自动化设备研发的技术人员、机械工程师、PLC程序员。 使用场景及目标:适用于需要精确控制机械设备运动轨迹的场合,如剪切、冲压等工艺。目标是帮助技术人员理解和实现电子凸轮追剪曲线生成算法,从而提升生产效率和产品质量。 其他说明:随着自动化技术的发展,该算法有望进一步优化并应用于更多的工业场景。

    MATLAB遗传算法GA求解函数极值问题:实数编码、非均匀变异与轮盘选择策略 遗传算法

    内容概要:本文详细介绍了如何在MATLAB环境中使用遗传算法(GA)求解函数极值问题。文中采用了实数编码方式、非均匀变异算子和轮盘赌选择法,提供了完整的MATLAB代码及详细注释,帮助初学者快速理解和应用遗传算法。首先解释了遗传算法的基础概念,如实数编码、非均匀变异和轮盘赌选择法的作用和意义。接着展示了具体的MATLAB代码实现步骤,包括函数定义、参数设置、种群初始化、适应度计算、选择、交叉和变异操作,最后输出最优解。 适合人群:对遗传算法感兴趣的初学者,尤其是有一定MATLAB基础的学生和研究人员。 使用场景及目标:适用于需要解决一元或多维函数极值问题的研究和工程应用。通过本教程的学习,读者可以掌握遗传算法的基本原理和实现方法,能够独立编写简单的遗传算法程序。 其他说明:本文不仅提供理论讲解,还附带完整代码和详细注释,便于读者理解和实践。建议读者跟随代码逐步运行,加深对遗传算法的理解。

    MATLAB Simulink在车辆运动学仿真中的应用:实时位置与车身姿态分析

    内容概要:本文详细介绍了MATLAB Simulink在车辆运动学仿真中的应用,重点探讨了实时位置和车身姿态的仿真过程。首先,文章简述了Simulink作为强大仿真工具的特点及其在车辆运动学建模中的优势。接着,分别从模型搭建、仿真参数设置和结果展示三个方面详细讲解了实时位置仿真的具体步骤。对于车身姿态仿真,则着重于模型构建、边界条件设置及仿真结果解读,展示了车辆在不同速度和转向角下的姿态变化情况。最后,文章指出通过Simulink进行的仿真分析能够为车辆控制、安全驾驶等领域提供技术支持,并有助于提升车辆行驶的安全性和稳定性。 适合人群:对车辆工程、自动化控制感兴趣的科研人员和技术开发者。 使用场景及目标:适用于希望深入了解车辆运动学仿真原理的研究者,以及希望通过仿真手段优化车辆性能的设计工程师。 其他说明:文中不仅提供了理论性的阐述,还结合了具体的实例操作指导,使读者能更好地掌握相关技能并应用于实际项目中。

    Python实现的UDS通信脚本 - Python

    内容概要:本文介绍了Python实现的UDS通信脚本,该脚本主要针对新能源电动汽车行业,支持Vector CAN和PCAN设备。它不仅能满足ISO15765、ISO14229等上位机代码编写需求,还能用于NXP560xB系列芯片和ARM TLE98x系列底层软件代码编写。此外,脚本还支持标定协议CCP代码编写及ASAP2 A2L文件合成工具的上位机代码编写。脚本具有良好的二次开发扩展能力,适用于多种应用场景。 适合人群:新能源电动汽车行业的资深工程师,尤其是那些从事UDS通信协议、CAN设备开发及相关底层软件代码编写的工程师。 使用场景及目标:① 实现UDS通信协议,支持多种CAN设备;② 编写ISO15765、ISO14229的上位机代码;③ 开发NXP560xB系列芯片和ARM TLE98x系列底层软件;④ 进行标定协议CCP代码编写及ASAP2 A2L文件合成工具的上位机代码编写;⑤ 提供二次开发扩展能力,满足不同应用场景的需求。 其他说明:文中还分享了工程师们在实际工作中积累的经验和技巧,强调了熟悉相关标准和技术规范、熟练掌握编程语言和工具、善于进行二次开发扩展的重要性。

    【计算机科学】计算机系统基础与核心技术知识点汇总:涵盖数据结构算法、网络、数据库、软件工程等领域备考指南

    内容概要:本文档系统地介绍了计算机科学多个核心领域的基础知识,涵盖计算机系统基础、数据结构与算法、计算机网络、数据库系统、软件工程、系统架构设计、项目管理、信息安全以及新技术趋势。具体包括计算机组成原理如冯·诺依曼体系结构、操作系统核心机制如进程管理和内存管理;数据结构如线性结构、树与图,经典算法如排序算法和动态规划;计算机网络如OSI与TCP/IP模型、关键协议详解;数据库系统如关系数据库设计和NoSQL;软件工程如开发模型对比、UML建模;系统架构设计如架构模式和性能优化;项目管理如十大知识领域和配置管理;信息安全如密码学基础和攻击与防御;新技术趋势如云计算和大数据与AI。最后还提供了备考策略,包括时间规划和答题技巧。; 适合人群:计算机相关专业学生、初入职场的研发人员或准备相关资格认证考试的考生。; 使用场景及目标:①作为计算机专业课程的学习参考资料;②为备考计算机相关职业资格认证提供系统化的复习指南;③帮助职场新人构建完整的计算机知识体系。; 其他说明:文档内容全面且深入浅出,既适合零散知识点的查漏补缺,也适用于系统的复习备考。建议读者根据自身情况制定合理的阅读计划,重点关注自己薄弱环节的知识点,并结合实际案例进行理解和记忆。

    工业自动化领域信捷PLC上位机Modbus TCP通信C#源代码实例教程 高效版

    内容概要:本文详细介绍了如何利用C#编写信捷PLC上位机程序,实现与PLC的Modbus TCP通信。文中首先简述了工业自动化背景下PLC与上位机通信的重要性,接着逐步指导读者完成开发环境搭建、Modbus TCP/IP协议栈安装以及关键的C#源代码编写步骤。提供的代码示例展示了从建立TCP连接、初始化Modbus主站对象到最后的数据交互(如读取线圈状态),并且强调了错误处理机制和资源管理的最佳实践。最后提醒使用者依据自身情况调整相关参数以适应不同应用场景的需求。 适合人群:对工业自动化感兴趣的技术爱好者、从事自动化控制系统开发的工程师或者正在学习PLC编程的学生。 使用场景及目标:帮助读者掌握用C#实现信捷PLC上位机的基本流程和技术要点,能够独立构建简单但完整的Modbus TCP通信系统,为进一步深入研究打下坚实的基础。 其他说明:本教程不仅提供了理论知识讲解,还附带了实用的操作指南和完整代码片段,便于快速理解和动手实践。同时鼓励读者在此基础上探索更多高级特性和复杂业务逻辑的实现。

    数值分析之幂法及反幂法C语言程序实例.doc

    数值分析之幂法及反幂法C语言程序实例.doc

    西门子PLC动态密码程序解析:适用于1200与1500PLC的SCL编写催款程序及动态密保

    内容概要:本文详细介绍了西门子PLC动态密码程序的设计与实现,特别针对1200PLC和1500PLC型号。该程序主要用于催款业务场景,采用了SCL(结构化控制语言)进行编写,提供了动态密保功能,增强了系统安全性和用户账户的保密性。文章从程序的编写思路、操作步骤到实际应用场景进行了全面解析,强调了其在提升工作效率、减少人为错误以及保障企业信息安全方面的优势。文中还提到,该程序具有高度的通用性和灵活性,适用于不同的业务需求,并配有详细的视频讲解,帮助用户更好地理解和操作。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是熟悉或希望深入了解西门子PLC编程的人士。 使用场景及目标:①需要在工业控制系统中实施催款程序的企业;②希望通过增强动态密保功能提升系统安全性的企业;③希望掌握SCL编程技巧并应用于实际项目中的技术人员。 其他说明:该程序不仅提升了系统的安全性和可靠性,还在效率和准确性方面表现出色,为企业带来了更多商业机会和发展空间。

Global site tag (gtag.js) - Google Analytics