四、注入方法返回值
<? 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 >
<? 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 >