1.调用构造器创建bean实例
package org.cric.util;
public interface Axe {
//Axe 接口有个砍得方法
public String chop();
}
package org.cric.util;
public class SteelAxe implements Axe {
//默认构造器
public SteelAxe(){
System.out.println("Spring实例化依赖Bean:SteelAxe实例……");
}
//实现Axe接口的chop方法
public String chop() {
return "钢斧砍材真快";
}
}
package org.cric.util;
public interface Person {
//Person 接口一个使用斧子的方法
public void userAxe();
}
package org.cric.util;
public class Chinese implements Person {
private Axe axe;
//默认的构造器
public Chinese(){
System.out.println("Spring 实例化主调Bean:Chinese 实例……");
}
//设值注入所需的setter方法
public void setAxe(Axe axe) {
System.out.println("Spring 执行依赖关系注入");
this.axe = axe;
}
//实现Person接口的useAxe()方法
public void userAxe() {
System.out.println(axe.chop());
}
}
<?xml version="1.0" encoding="UTF-8"?> <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-2.5.xsd "> <bean id="axe" class="org.cric.util.SteelAxe"/> <bean id="person" class="org.cric.util.Chinese"> <property name="axe" ref="axe"/> </bean> </beans>
package org.cric.util;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BeanTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println("程序已经实例化Spring 容器");
Chinese chinese = (Chinese)context.getBean("person");
System.out.println("程序已经完成了chinese bean 的实例化");
chinese.userAxe();
}
}
2.使用静态工厂方法创建bean
package org.cric.staticfactory;
public interface Bing {
//接口定义testBeing()方法
public void testBing();
}
package org.cric.staticfactory;
public class Cat implements Bing {
private String msg;
//依赖注入时必需的setter方法
public void setMsg(String msg) {
this.msg = msg;
}
//实现接口必须实现的testBing方法
public void testBing() {
System.out.println(msg + "猫喜欢吃老鼠");
}
}
package org.cric.staticfactory;
public class Dog implements Bing {
private String msg;
//依赖注入式必需的setter方法
public void setMsg(String msg) {
this.msg = msg;
}
//实现接口必须实现的testBing方法
public void testBing() {
System.out.println(msg + "狗爱啃骨头");
}
}
package org.cric.staticfactory;
public class BingFactory {
public static Bing getBing(String arg){
if(arg.equalsIgnoreCase("dog")){
return new Dog();
}else{
return new Cat();
}
}
}
<?xml version="1.0" encoding="UTF-8"?> <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-2.5.xsd "> <!-- <bean id="axe" class="org.cric.util.SteelAxe"/> <bean id="person" class="org.cric.util.Chinese"> <property name="axe" ref="axe"/> </bean> --> <!-- 配置BingFactory的getBing()方法产生dog bean --> <bean id="dog" class="org.cric.staticfactory.BingFactory" factory-method="getBing"> <!-- 配置静态工厂方法的参数 --> <constructor-arg value="dog"/> <!-- 配置普通依赖注入属性 --> <property name="msg" value="我是狗!"/> </bean> <!-- 配置BingFactory的getBing()方法产生cat bean --> <bean id="cat" class="org.cric.staticfactory.BingFactory" factory-method="getBing"> <!-- 配置静态工厂方法的参数 --> <constructor-arg value="cat"/> <!-- 普通属性依赖注入属性 --> <property name="msg" value="我是猫!"/> </bean> </beans>
package org.cric.staticfactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class BeanTest {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Bing b1 = (Bing)context.getBean("dog");
b1.testBing();
Bing b2 = (Bing)context.getBean("cat");
b2.testBing();
}
}
3.使用实例工厂方法创建bean
package org.cric.other;
public interface Person {
//定义一个打招呼的方法
public String sayHello(String name);
//定义一个告别的方法
public String sayGoodBye(String name);
}
package org.cric.other;
public class Chinese implements Person {
public String sayGoodBye(String name) {
return name + ",下次再见";
}
public String sayHello(String name) {
return name + ",你好";
}
}
package org.cric.other;
public class American implements Person {
public String sayGoodBye(String name) {
return name + ",GoodBye";
}
public String sayHello(String name) {
return name + ",Hello";
}
}
package org.cric.other;
public class PersonFactory {
public Person getPerson(String arg){
if(arg.equalsIgnoreCase("chinese")){
return new Chinese();
}else{
return new American();
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<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-2.5.xsd ">
<!--
<bean id="axe" class="org.cric.util.SteelAxe"/>
<bean id="person" class="org.cric.util.Chinese">
<property name="axe" ref="axe"/>
</bean>
-->
<!-- 配置BingFactory的getBing()方法产生dog bean -->
<bean id="dog" class="org.cric.staticfactory.BingFactory" factory-method="getBing">
<!-- 配置静态工厂方法的参数 -->
<constructor-arg value="dog"/>
<!-- 配置普通依赖注入属性 -->
<property name="msg" value="我是狗!"/>
</bean>
<!-- 配置BingFactory的getBing()方法产生cat bean -->
<bean id="cat" class="org.cric.staticfactory.BingFactory" factory-method="getBing">
<!-- 配置静态工厂方法的参数 -->
<constructor-arg value="cat"/>
<!-- 普通属性依赖注入属性 -->
<property name="msg" value="我是猫!"/>
</bean>
<!-- 配置工厂Bean,该Bean负责产生其他Bean实例 -->
<bean id="personFactory" class="org.cric.other.PersonFactory"/>
<bean id="chinese" factory-bean="personFactory" factory-method="getPerson">
<!-- 调用工厂方法时,传入的参数通过 constructor-arg 指定-->
<constructor-arg value="chinese"/>
</bean>
<bean id="american" factory-bean="personFactory" factory-method="getPerson">
<constructor-arg value="american"/>
</bean>
</beans>