Spring依赖关系配置(续)
四、注入方法返回值
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="valueGenerrator" class="prolove.ValueGenerator"/>
<bean id="son5" class="prolove.Son">
<property name="age">
<bean class="org.springframework.beans.factory.config.
MethodInvokingFactoryBean">
<property name="targetObject">
<ref local="valueGenerator">
</property>
<property name="targetMethod">
<value>getValue</value>
</property>
</bean>
</property>
</bean>
</beans>
public class ValueGenerator
...{
public int getValue() ...{
return 2;
}
public static int getStaticValue() ...{
return 9;
}
}
public class SpringTest
...{
public static void main(String[] args) ...{
ApplicationContext ctx =
new FileSystemXmlApplicationContext("bean.xml");
Son son5 = (Son)ctx.getBean("son5");
System.out.println("系统获取的son5的属性值:" + son5.getAge());
}
}
执行结果如下:
[java]系统获取的son5的属性值:2
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="valueGenerrator" class="prolove.ValueGenerator"/>
<bean id="son4" class="prolove.Son">
<property name="age">
<bean class="org.springframework.beans.factory.config.
MethodInvokingFactoryBean">
<property name="targetClass">
<value>prolove.ValueGenerator</value>
</property>
<property name="targetMethod">
<value>getStaticValue</value>
</property>
</bean>
</property>
</bean>
</beans>
Son son4 = (Son)ctx.getBean("son4");
System.out.println("系统获取的son4的属性值:" + son4.getStaticAge());
执行结果如下:
[java]系统获取的son4的属性值:9
<!--将静态方法返回值直接定义成bean-->
<bean id="sysProps" class="org.springframework.beans.factory.config.
MethodInvokingFactoryBean">
<property name="targetClass">
<value>java.lang.System</value>
</property>
<property name="targetMethod">
<value>getProperties</value>
</property>
</bean>
<bean id="javaVersion" class="org.springframework.beans.factory.config.
MethodInvokingFactoryBean">
<property name="targetObject"><ref local="sysProps"></property>
<property name="targetMethod"><value>getProperty</value></property>
<property name="arguments">
<list>
<value>java.version</value>
</list>
</property>
</bean>
System.out.println("系统获取Java版本:" + ctx.getBean("javaVersion"));
执行结果如下:
[java]系统获取Java版本:1.5.0_14
<bean id="myBean" class="org.springframework.beans.factory.config.
MethodInvokingFactoryBean">
<property name="staticMethod">
<value>prolove.MyClassFactory.getInstance</value>
</property>
</bean>
五、强制初始化bean
<bean id="beanOne" class="ExampleBean" depends-on="manager">
<property name="manager"><ref local="manager"/></property>
</bean>
<bean id="manager" class="ManagerBean"/>
六、自动装配
1.byName规则
<?xml versin="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="chinese" class="prolove.Chinese" autowire="byName"/>
<bean id="gundog" class="prolove.Gungod">
<property name="name">
<value>wangwang</value>
</property>
</bean>
</beans>

public void setGunDog(Dog dog) ...{
this.dog = dog;
}
2.byType规则
<?xml versin="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="chinese" class="prolove.Chinese" autowire="byType"/>
<bean id="gundog" class="prolove.Gundog">
<property name="name">
<value>wangwang</value>
</property>
</bean>
</beans>

public void setDog(Dog dog) ...{
this.dog = dog;
}
下面则不行-->
<?xml versin="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="chinese" class="prolove.Chinese" autowire="byType"/>
<bean id="gundog" class="prolove.Gundog">
<property name="name">
<value>wangwang</value>
</property>
</bean>
<bean id="petdog" class="prolove.Petdog">
<property name="name">
<value>ohoh</value>
</property>
</bean>
</beans>
<?xml versin="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="chinese" class="prolove.Chinese" autowire="byNme">
<property name="Gundog">
<ref local="petdog"/>
</property>
</bean>
<bean id="gundog" class="prolove.Gundog">
<property name="name">
<value>wangwang</value>
</property>
</bean>
<bean id="petdog" class="prolove.Petdog">
<property name="name">
<value>ohoh</value>
</property>
</bean>
</beans>
七、依赖检查
public class Chinese implements Person ...{
private Axe axe;
private int age = 0;
public Chinese() ...{
System.out.println("Spring实例化主调Bean:Chinese实例...");
}
//依赖注入Axe必需的setter方法
public void setAxe(Axe axe) ...{
this.axe = axe;
}
public void setAge(int age) ...{
this.age = age;
}
//测试用方法
public void useAxe() ...{
System.out.println(axe.chop() + " 此人年龄为: " + age);
}
}
<?xml versin="1.0" encoding="gb2312"?>
<!DOCTYPE beans PUBLIC"-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="steelAxe" class="prolove.SteelAxe"/>
<bean id="chinese" class="prolove.Chinese" dependency-check="all">
<property name="axe">
<ref local="steelAxe"/>
</property>
</bean>
</beans>
推荐文章 |
