Spring 的核心功能就是提供一个 IoC 容器,用于管理应用程序中的 bean,在容器中配置元数据来管理 Bean 之间的依赖关系,Java 程序中的类都可以交由 Spring 容器管理。
配置 Spring 元数据的方式有三种:
Spring 最早的时候提供BeanFactory接口实现 Bean 容器,而后面新增的许多功能都是基于其子接口ApplicationContext来实现的,前面说的三种配置方式,可以使用下面三个实现类来实例化容器。
|interface BeanFactory (org.springframework.beans.factory)
|---interface ApplicationContext (org.springframework.context)
|---|---class FileSystemXmlApplicationContext (org.springframework.context.support)
|---|---class ClassPathXmlApplicationContext (org.springframework.context.support)
|---|---class AnnotationConfigApplicationContext (org.springframework.context.annotation)
例如使用 ClassPathXmlApplicationContext 来通过 classpath 目录下的配置文件实例化容器:
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
在 Spring 容器中配置好的 Bean 都会被 Spring 自动实例化,以供在开发过程中注入直接可以使用,而不需要手动去 new 对象。
Spring 容器默认使用类的无参构造器来实例化 Bean,也可以指定其他带参数的构造器来实例化。
<!--默认使用无参构造器-->
<bean id="beanProvider" class="cn.codeartist.spring.bean.xml.BeanProvider"/>
<!--使用其他构造器-->
<bean id="beanExample" class="cn.codeartist.spring.bean.xml.BeanExample">
<constructor-arg index="0" value="码匠公众号"/>
<constructor-arg index="1" value="2021"/>
<constructor-arg index="2" ref="beanProvider"/>
</bean>
Spring 容器支持使用静态工厂方法来实例化 Bean,在类中定义一个 static 方法来创建对象实例。
public class BeanExample {
private static BeanExample beanExample = new BeanExample();
public static BeanExample getInstance() {
return beanExample;
}
}
在 Bean 配置中使用 factory-method 属性来指定工厂方法。
<bean id="beanExample" class="...xml.BeanExample" factory-method="getInstance"/>
和静态工厂方法一样,不同的是工厂方法是实例化后的 Bean 的方法而不是静态方法。
public class BeanExampleFactory {
private static BeanExample beanExample = new BeanExample();
public BeanExample getInstance() {
return beanExample;
}
}
在 Bean 配置中使用 factory-bean 属性指定工厂类的 Bean,使用 factory-method 属性来指定工厂方法。
<bean id="beanExample" class="...xml.BeanExample" factory-bean="beanExampleFactory" factory-method="getInstance"/>
<bean id="beanExampleFactory" class="cn.codeartist.spring.bean.xml.BeanExampleFactory"/>
通过 scope 属性配置 bean 的作用域,来指定 bean 的实例化作用范围。
<bean id="beanExample" class="...xml.BeanExample" scope="prototype"/>
常用的几种 Bean 作用域如下:
| 作用域 | 描述 |
|---|---|
singleton |
(默认)单例作用域,在 Spring 容器内部只创建一个实例 |
prototype |
原型作用域,在容器中创建多个实例,每使用一次创建一个实例 |
request |
请求作用域,在 Web 框架下单次请求创建一个实例 |
session |
会话作用域,在 Web 框架下单次会话内创建一个实例 |
application |
应用作用域,在 ServletContext 生命周期内创建一个实例 |
Spring 容器创建好了 Bean 实例后,会根据实例间的依赖关系来进行注入。
通过类的构造器来注入依赖的值或 Bean。
<bean id="beanExample" class="...xml.BeanExample">
<constructor-arg index="0" value="码匠公众号"/>
<constructor-arg index="1" value="2021"/>
<constructor-arg index="2" ref="beanProvider"/>
</bean>
通过类的 Setter 方法注入依赖的值或 Bean。
<bean id="beanExample" class="...xml.BeanExample">
<property name="name" value="码匠公众号"/>
<property name="year" value="2021"/>
<property name="beanProvider" ref="beanProvider"/>
</bean>
在两种注入方式中,配置值的方式:
value:注入值ref:注入引用(注入 Bean 实例)一般情况下,Bean 之间的依赖关系并不明确,但在一些情况下,比如初始化一个静态类,使用 depends-on 属性指定在初始化该 bean 之前,强制初始化依赖的一个或多个 bean。
<bean id="beanExample" class="...xml.BeanExample" depends-on="beanProvider" />
一般情况下,Spring 会在容器启动的时候把所有 Bean 实例化完成,如果想在第一次使用的 Bean 的时候才初始化,可能配置 lazy-init 来实现。
<bean id="beanExample" class="...xml.BeanExample" lazy-init="true"/>
Spring 容器支持自动注入,而不需要手动通过 ref 来指定依赖的 bean 实例。
<bean id="beanExample" class="...xml.BeanExample" autowire="byName"/>
容器支持的注入方式:
| 注入方式 | 描述 |
|---|---|
no |
(默认)不使用自动注入 |
byName |
通过 bean 名称注入 |
byType |
通过 bean 类型注入 |
constructor |
通过构造器参数类型注入 |
| 属性 | 默认值 | 描述 |
|---|---|---|
id |
- | 指定 bean 的名称 |
class |
- | 指定 bean 的类 |
scope |
singleton |
指定作用域 |
depends-on |
- | 指定依赖关系 |
lazy-init |
false |
配置懒加载 |
autowire |
no |
配置自动注入 |
factory-bean |
- | 指定提供工厂方法的 bean |
factory-method |
- | 指定创建 bean 的工厂方法 |
Gitee 仓库:https://gitee.com/code_artist/spring
代码目录:src/main/java/cn/codeartist/spring/bean/xml
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模