<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-3.0.xsd" > <description>rabbitmq 链接服务配置</description> <!--步骤一、配置连接工厂--> <bean id="connectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory"> <property name="host" value="${mq.address}"/> <property name="port" value="${mq.port}"/> <property name="password" value="${mq.pwd}"/> <property name="username" value="${mq.user}"/> <property name="publisherConfirms" value="true"/> <property name="publisherReturns" value="true"/> <property name="virtualHost" value="${mq.vhost}"/> <property name="requestedHeartBeat" value="50"/> </bean> //....... </beans>
对于配置XML文件 Spring 提供了不少的元素和属性,用于对对象与其依赖关系进行描述。Spring的XML文件就像一张记录详细配料,火候等的菜谱。对于Spring XML文件,咱们通常经过以<beans>....</beans>包围的元素开始配置。java
有关http://www.springframework.org/schema/beans 中对于beans 的定义可参见:标签系列一:spring 中beans解释以及beans标签里面的属性spring
接下来我要整理一下关于beans 的相关的元素及属性:网络
beans命名空间下的元素编辑器
经过编辑器能够轻易的找到在beans命名空间下,存在beans、bean、alias、description、import 五个元素存在。(也多是4个, 在http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 版中没有beans元素,4.0版存在(默认最新版请把上文中的-3.0 去掉))ide
1.一、beans元素函数
beans元素是顶层(一般为根)元素。容许定义全部嵌套bean定义的默认值。post
beans元素有本身的属性:url
1.1.一、default-autowire 属性:spa
default-autowire 有五个值 分别以下:
默认的值为:no 即不启用自动注入。
default:其实是会优先执行constructor而后是byType
byType:这个是会根据类型去注入,当找到了会直接注入,没有找到不会报错,可是找到多个会报No unique bean of type的错误
byName:这个会根据name注入
constructor:这个是经过构造注入
no:不启用自动注入
1.1.二、default-autowire-candidates 属性:
default-autowire-candidates是候选者,自动装配时即匹配则被包含。不匹配的排除在外。
default-autowire-candidates属性的值容许使用模式字符串,例如咱们制定default-autowire-candidates=“*abc”,则全部以“abc”结尾的Bean都将被自动装配。它还支持多个字符,能够经过,空格 等分割。
1.1.三、default-init-method 和 default-destroy-method 属性:
default-init-method="init" default-destroy-method="destroy"
不少Bean都须要配置初始化方法和销毁方法,那么能够在beans标签中配置default-init-method和default-destroy-method来指定全部Bean的默认初始化方法和销毁方法 (init 与 destroy 是bean中的方法)
1.1.四、default-lazy-init 属性:
spring配置默认default-lazy-init为false,当属性default-lazy-init设置成true时,sping不会再去加载整个对象实例图,大大减小了初始化的时间,减小了spring的启动时间。
1.1.五、default-merge 属性:
从Spring 2.0M2开始,beans支持default-merge= "true" 的定义,子类不须要从新定义父类的List型属性中已定义过的内容
1.1.6、profile 属性:
将程序从一个环境迁移或切换到另外一个环境 定义环境名称。
默认上下文中,添加spring.profiles.default的配置,以下:
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>development</param-value>
</context-param>
而对于spring.profiles.default,这里须要说明下:在Spring的Profile中,Profile存在两种状态,一种为默认加载的profile(spring.profiles.default),一种为指定激活的profile(spring.profiles.active)。若是程序未指定active状态的profile,那么执行default状态的profile,若是两种状态都指定,则优先执行或选择active状态的profile。
1.二、alias 元素(别名)
在对bean进行定义时,除了使用id属性来指定名称以外,为了提供多个名称,可使用alias标签来指定。而全部的这些名称都指向同一个bean,有时咱们指望能在当前位置为那些在别处定义的bean引入别名。在XML配置文件中,可用单独的<alias/>元素来完成bean别名的定义。如:
配置文件中定义了一个JavaBean
<bean id="resourceHolder" class="com.zk.demo1025.ResourceHolder"> </bean>
我要给这个JavaBean增长别名,以方便不一样对象来调用。咱们就能够这样写:
<alias name="resourceHolder" alias="resourceHolder1"/>
<alias name="resourceHolder" alias="resourceHolder2"/>
<alias name="resourceHolder" alias="resourceHolder3"/>
或
<alias name="resourceHolder" alias="resourceHolder1,resourceHolder2,resourceHolder3"/>
或者是用name属性来指定,如:
<bean id="resourceHolder" name="resourceHolder1,resourceHolder2,resourceHolder3 " class="com.zk.demo1025.ResourceHolder"> </bean>
1.三、description (描述)元素
description元素必须在beans 中的第一行,用于描述配置的信息。
1.4 import 元素
在Spring的配置文件,有时候为了分模块的更加清晰的进行相关实体类的配置。引入其余模块XML
当使用import元素时会提供一下选项:
其中,以 .xml 结尾的是项目中的配置文件。
1.默认状况下,使用相对路径来辅助查找配置文件
2.Spring提供了四种前缀标记来辅助查找配置文件:
(1)[classpath:]:表示从classpath开始寻找后面的资源文件
(2)[file:]:表示使用文件系统的方式寻找后面的文件(文件的完整路径)
(3)[classpath*:]:表示不只会在class路径中去查找文件,还会在jar中去查找文件
(4)[http:] :表示经过网络地址查找文件
注:classpath:XXXXX:至关于/WIN-INF/classes/xxxxx
1.五、bean 元素
bean元素的属性有不少:
经常使用属性有:
id标签的值 在 同一个配置文件中是唯一的,在多个spring文件中存在相同的id 或 name后面引入的配置会覆盖前面的bean
其他属性有:
1.5.一、bean元素的子元素
由上图能够看到,bean元素中有7子元素
property 元素属性有 name、 ref 、value 三个。 其中 name 为类中要注入依赖项的名字。须要有set方法。name值与setXXX 中XXX一致,与声明的名字无关。
ref 为引用项bean的id 或name 。value 值为值类型
property 元素有如下子元素:
ref: <property name="....." ref="......" />就是找当前配置文件里的bean ,<ref bean ="....."/> 是寻找全局(能够到其余xml中)中的 bean;<ref>标签里 有3种属性 <ref bean="寻找全局(能够到其余xml中)中的 bean"/>,<ref local="关联当前xml的bean "/>,<ref parent="用于指定其依赖的父 JavaBean 定义"/>。在4.0BeanXSD中 ref 元素上的local 属性再也不受支持
bean: 内部 Bean:当 Spring IoC 容器中的 bean1 只会被 bean2 引用,而不会被容器中任何其余 Bean 引用的时候,则能够将这个 bean1 之内部 Bean 的方式注入到 bean2 中。
description: 描述,一个字符串
value: 为属性注入字面值
set: 当属性为 java.util.Set 的时候 能够在集合上加 merge="true",容许与父类集合合并
<bean id="boss" class="***">
<property name="favorites">
<set>
<value>唱歌</value>
<value>运动</value>
<value>读书</value>
</set>
</property>
</bean>
array:当属性为 java.util.Array 的时候 能够在集合上加 merge="true",容许与父类集合合并
<property name="favs"> <array> <value>足球</value> <value>篮球</value> <value>排球</value> </array> </property>
idref: idref元素只是一种防止错误的方法,能够将容器中另外一个bean的id(一个字符串值,而不是引用)传递给一个<constructor-arg/>或<property/>元素(在某种意义上等同于<value/>)
<bean id="theTargetBean" class="..."/> <bean id="theClientBean" class="..."> <property name="targetName"> <idref bean="theTargetBean"/> </property> </bean>
list: 当属性为 java.util.List 的时候,能够在集合上加 merge="true",容许与父类集合合并
<bean id="boss" class="***">
<property name="favorites">
<list>
<value>唱歌</value>
<value>运动</value>
<value>读书</value>
</list>
</property>
</bean>
map: 当属性为 java.util.Map 的时候 能够在集合上加 merge="true",容许与父类集合合并
<bean id="boss" class="***">
<property name="favorites">
<map>
<entry>
<key><value>key01</value></key>
<value>唱歌</value>
</entry>
<entry>
<key><value>key02</value></key>
<value>运动</value>
</entry>
<entry>
<key><ref bean="keyBean" /></key>
<ref bean="valueBean" />
</entry>
</map>
</property>
</bean>
meta: 一个额外的属性,可使用 BeanDefinition的getAttribute(key);方法获取,
<meta key = "key" value = "values">
null: 须要为某个 bean 的属性注入一个 null 值,在这里咱们须要使用专用的 <null/> 元素标签,经过它能够为其余对象的属性注入 null 值。
props: 当属性为 java.util.Properties 的时候 能够在集合上加 merge="true",容许与父类集合合并
<bean id="boss" class="***">
<property name="favorites">
<props>
<prop key="p01">唱歌</prop>
<prop key="p02">运动</prop>
<prop key="p03">读书</prop>
</props>
</properties>
</property>
</bean>
以下图,constructor-arg 有以下属性:
constructor-arg下的子元素以下:
与 property 属性相同,不在赘述。
能够不是 抽象类型的方法
public abstract class FathorCarService { public void read(){ CarService carService=look(); System.out.println("睡觉,吃法,上班"); carService.read(); } protected abstract CarService look(); } public class CarService { public void read(){ System.out.println("读书,看报,写字"); } } public static void main(String[] args) { ClassPathXmlApplicationContext cx=new ClassPathXmlApplicationContext("classpath:spring/spring-config.xml"); FathorCarService carService=(FathorCarService)cx.getBean("car2"); carService.read(); } <bean id="car" class="service.CarService" scope="prototype"/> <bean id="car2" class="service.FathorCarService"> <lookup-method name="look" bean="car"/> </bean>
如:
protected CarService look(){ return null; }
一样能够进行方法注入。结果以下:
官方文档中 注入方法签名:
public class FathorCarService { public void read(){ CarService carService=look(); System.out.println("睡觉,吃法,上班"); carService.read(); } protected CarService look(){ return null; } } public class CarService implements MethodReplacer { public void read(){ System.out.println("读书,看报,写字"); } @Override public Object reimplement(Object obj, Method method, Object[] args) throws Throwable { System.out.println("遛狗,跳绳,跑路"); return null; } } public static void main(String[] args) { ClassPathXmlApplicationContext cx=new ClassPathXmlApplicationContext("classpath:spring/spring-config.xml"); FathorCarService carService=(FathorCarService)cx.getBean("car2"); carService.read(); } <bean id="car" class="service.CarService" scope="prototype"/> <bean id="car2" class="service.FathorCarService"> <replaced-method name="read" replacer="car"/> </bean>
使用方法替换将本应该输出
输出为:
大概就这么多了,若是有什么疏漏的地方,望各位博友指出.....