我爱编程

Spring揭秘-xml配置文件的说明

2018-01-22  本文已影响25人  liangxifeng833

Spring BeanFactory的xml配置文件的说明

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" ➥
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
...
</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:util="http://www.springframework.org/schema/util"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd">
...
</beans>

<beans>标签的默认属性

<description> 、 <import> 和 <alias>

构造方法注入

<bean id="mockBO" class="..MockBusinessObject">
<constructor-arg type="int"> <!--查找参数类型为int的构造方法-->
<value>111111</value>
</constructor-arg>
< /bean>
<bean id="mockBO" class="..MockBusinessObject">
  <constructor-arg index="1" value="11111"/> <!-- index代表构造方法参数所以位置 -->
  <constructor-arg index="0" value="22222"/>
</bean>

setter方式注入

<bean id="djNewsProvider" class="..FXNewsProvider">
  <property name="newsListener">
    <ref bean="djNewsListener"/>
  </property>
  <property name="newPersistener">
    <ref bean="djNewsPersister"/>
  </property>
< /bean>

<property> 和 <constructor-arg> 中可用的配置项

<constructor-arg>
  <value>111111</value>
</constructor-arg>
<property name="attributeName">
  <value>222222</value>
</property>

等效于

<constructor-arg value="111111"/>
<property name="attributeName" value="222222"/>
<constructor-arg>
  <ref local="djNewsPersister"/>
</constructor-arg>
或者
<constructor-arg>
  <ref parent="djNewsPersister"/>
</constructor-arg>
或者
<constructor-arg>
  <ref bean="djNewsPersister"/>
</constructor-arg>
<property name="newsListenerBeanName">
  <idref bean="djNewsListener"/>
</property>
<bean id="djNewsProvider" class="..FXNewsProvider">
<constructor-arg index="0">
  <!--内部bean作用域只可以被djNewsProvider引用, 其他bean无法引用该对象 -->
  <bean class="..impl.DowJonesNewsListener">
</bean>
</constructor-arg>
<constructor-arg index="1">
  <ref bean="djNewsPersister"/>
</constructor-arg>
< /bean>
public class MockDemoObject
{
  private List param1;
  private String[] param2;
  ...
  // 相应的setter和getter方法
  ...
}
配置类似于
<property name="param1">
  <list>
    <value> something</value>
    <ref bean="someBeanName"/>
    <bean class="..."/>
  </list>
</property>
<property name="param2">
  <list>
    <value>stringValue1</value>
    <value>stringValue2</value>
  </list>
</property>
public class MockDemoObject
{
private Set valueSet;
// 必要的setter和getter方法
...
}
配置类似于
<property name="valueSet">
  <set>
    <value> something</value>
    <ref bean="someBeanName"/>
    <bean class="..."/>
    <list>
    ...
    </list>
  </set>
</property>
public class MockDemoObject
{
private Map mapping;
// 必要的setter和getter方法
...
}
配置类似于
<property name="mapping">
  <map>
    <entry key="strValueKey">
      <value>something</value>
    </entry>
    <entry>
      <key>objectKey</key>
      <ref bean="someObject"/>
    </entry>
    <entry key-ref="lstKey">
      <list>
        ...
      </list>
    </entry>
     ...
  </map>
< /property>

等效于

public class MockDemoObject
{
private Map mapping;
// 必要的setter和getter方法
...
}
配置类似于
<property name="valueSet">
  <map>
    <entry key="strValueKey" value="something"/>
    <entry key-ref="" value-ref="someObject"/>
    <entry key-ref="lstKey">
    <list>
      ...
    </list>
    </entry>
    ...
  </map>
</property>
public class MockDemoObject
{
  private Properties emailAddrs;
  // 必要的setter和getter方法
...
}
配置类似于
<property name="valueSet">
  <props>
    <prop key="author">fujohnwang@gmail.com</prop>
    <prop key="support">support@spring21.cn</prop>
    ...
  </props>
</property>
public class MockDemoObject
{
  private String param1;
  private Object param2;
  // 必要的setter和getter方法
  ...
}
配置为
<property name="param1">
  <null/>
</property>
<property name="param2">
  <null/>
</property>
实际上就相当于
public class MockDemoObject
{
  private String param1=null;
  private Object param2=null;
  // 必要的setter和getter方法
  ...
}

depends-on

<bean id="classAInstance" class="...ClassA" depends-on="configSetup,configSetup2,..."/>
<bean id="configSetup" class="SystemConfigurationSetup"/>
<bean id="configSetup2" class="SystemConfigurationSetup2"/>

autowire自动绑定

public class Foo
{
  private Bar emphasisAttribute;
...
// 相应的setter方法定义
}
public class Bar
{
  ...
}
那 么应该使用如下代码所演示的自动绑定定义,才能达到预期的目的:
<bean id="fooBean" class="...Foo" autowire="byName">
</bean>
<bean id="emphasisAttribute" class="...Bar">
</bean>
public class Foo
{
  private Bar bar;
  public Foo(Bar arg)
  {
    this.bar = arg;
  }
  ...
}
相应配置为
<bean id="foo" class="...Foo" autowire="constructor"/>
<bean id="bar" class="...Bar">
< /bean>
<beans default-autowire="byType">
<bean id="..." class="..."/>
...
</beans>

lazy-init

上一篇 下一篇

猜你喜欢

热点阅读