定义接口:
package Bean.staticFactoryBean;
public interface Axe {
public String chop();
}
package Bean.staticFactoryBean;
public interface Person {
public void useAxe();
}
public interface Axe {
public String chop();
}
package Bean.staticFactoryBean;
public interface Person {
public void useAxe();
}
实现类:
package Bean.staticFactoryBean;
public class AmericanPerson implements Person {
private Axe axe;
public Axe getAxe() {
return axe;
}
public void setAxe(Axe axe) {
this.axe = axe;
}
public void useAxe() {
System.out.println(axe.chop());
}
}
package Bean.staticFactoryBean;
public class ChinesePerson implements Person {
private Axe axe;
public Axe getAxe() {
return axe;
}
public void setAxe(Axe axe) {
this.axe = axe;
}
public void useAxe() {
System.out.println(axe.chop());
}
}
package Bean.staticFactoryBean;
public class SteelAxe implements Axe {
public String chop() {
return "这是一把铁斧子";
}
}
package Bean.staticFactoryBean;
public class WoodAxe implements Axe {
public String chop() {
return "这是一把木头斧子";
}
}
public class AmericanPerson implements Person {
private Axe axe;
public Axe getAxe() {
return axe;
}
public void setAxe(Axe axe) {
this.axe = axe;
}
public void useAxe() {
System.out.println(axe.chop());
}
}
package Bean.staticFactoryBean;
public class ChinesePerson implements Person {
private Axe axe;
public Axe getAxe() {
return axe;
}
public void setAxe(Axe axe) {
this.axe = axe;
}
public void useAxe() {
System.out.println(axe.chop());
}
}
package Bean.staticFactoryBean;
public class SteelAxe implements Axe {
public String chop() {
return "这是一把铁斧子";
}
}
package Bean.staticFactoryBean;
public class WoodAxe implements Axe {
public String chop() {
return "这是一把木头斧子";
}
}
工厂类:
package Bean.staticFactoryBean;
import Bean.staticFactoryBean.*;
public class BeingFactory {
public static Person getPerson(String arg){
if(arg.equalsIgnoreCase("chinese")){
return new Bean.staticFactoryBean.ChinesePerson();
}
else{
return new Bean.staticFactoryBean.AmericanPerson();
}
}
}
import Bean.staticFactoryBean.*;
public class BeingFactory {
public static Person getPerson(String arg){
if(arg.equalsIgnoreCase("chinese")){
return new Bean.staticFactoryBean.ChinesePerson();
}
else{
return new Bean.staticFactoryBean.AmericanPerson();
}
}
}
配置文件,和使用构造函数创建bean不同的是,这里的class是静态方法的实现类,多加了factory-method属性,工厂方法的参数通过<constructor-arg>定义
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="chinese" class="Bean.staticFactoryBean.BeingFactory" factory-method="getPerson">
<constructor-arg>
<value>chinese</value>
</constructor-arg>
<property name="axe">
<ref local="woodaxe"/>
</property>
</bean>
<bean id="american" class="Bean.staticFactoryBean.BeingFactory" factory-method="getPerson">
<constructor-arg>
<value>american</value>
</constructor-arg>
<property name="axe">
<ref local="steelaxe"/>
</property>
</bean>
<bean id="woodaxe" class="Bean.staticFactoryBean.WoodAxe"></bean>
<bean id="steelaxe" class="Bean.staticFactoryBean.SteelAxe"></bean>
</beans>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="chinese" class="Bean.staticFactoryBean.BeingFactory" factory-method="getPerson">
<constructor-arg>
<value>chinese</value>
</constructor-arg>
<property name="axe">
<ref local="woodaxe"/>
</property>
</bean>
<bean id="american" class="Bean.staticFactoryBean.BeingFactory" factory-method="getPerson">
<constructor-arg>
<value>american</value>
</constructor-arg>
<property name="axe">
<ref local="steelaxe"/>
</property>
</bean>
<bean id="woodaxe" class="Bean.staticFactoryBean.WoodAxe"></bean>
<bean id="steelaxe" class="Bean.staticFactoryBean.SteelAxe"></bean>
</beans>
测试代码:
public static void main(String[] args) throws Exception {
String path=new Test().getClass().getResource("/").getPath();
String realpath=path.substring(1, path.length());
ApplicationContext context=new FileSystemXmlApplicationContext(realpath+"/staticMethodbeans.xml");
Person person1=(Person)context.getBean("chinese");
person1.useAxe();
Person person2=(Person)context.getBean("american");
person2.useAxe();
}
String path=new Test().getClass().getResource("/").getPath();
String realpath=path.substring(1, path.length());
ApplicationContext context=new FileSystemXmlApplicationContext(realpath+"/staticMethodbeans.xml");
Person person1=(Person)context.getBean("chinese");
person1.useAxe();
Person person2=(Person)context.getBean("american");
person2.useAxe();
}
From: http://blog.csdn.net/daryl715/article/details/1539011
相关推荐
本篇将详细探讨两种工厂方法——实例工厂方法和静态工厂方法,用于创建Spring Bean。 首先,我们要理解Spring Bean的概念。Spring Bean是Spring IoC容器管理的对象,这些对象的生命周期、依赖关系以及初始化行为由...
本篇将详细介绍如何在Spring中使用静态工厂方法来创建实例。 首先,让我们理解什么是静态工厂方法。静态工厂方法是类中的一个静态成员方法,它不依赖于类的实例,而是通过类名直接调用,返回一个对象。这种方法与...
在`doCreateBean()`方法中,Spring会创建Bean的实例,`createBeanInstance(beanName, mbd, args)`执行Bean实例的创建,而`populateBean(beanName, mbd, instanceWrapper)`则负责填充Bean的属性,将依赖注入到Bean中...
4. **启动后处理器(BeanPostProcessor)**:这些是特殊类型的Bean,它们在所有常规Bean实例化之后,但初始化之前进行处理。它们的实例化顺序由`@Order`注解决定,或者通过实现`Ordered`接口来控制。 5. **...
4. **静态工厂方法或Singleton作用域**:如果使用静态工厂方法创建Bean,且未正确配置单例模式,那么每次请求都会创建新的Bean实例。对于Singleton作用域的Bean,Spring保证在整个容器生命周期内只有一个实例,如果...
调用实例工厂方法创建bean,与调用静态工厂方法创建bean 的用法基本相似。 区别如下: ·调用实例工厂方法创建bean 时,必须将实例工厂配置成bean 实例。 而静态工厂方法则无须配置工厂bean。 ·调用实例工厂方法...
**静态工厂方法实例化**则涉及到使用类的静态方法来创建Bean。在配置中,我们需要提供`factory-bean`(工厂Bean的ID)和`factory-method`(工厂方法名)。例如: ```xml <bean id="exampleBean" factory-bean=...
Spring IOC 04 配置通过静态工厂方法创建的bean、实例工厂创建的bean、FactoryBean (1)bean的创建默认就是框架利用反射new出来的bean实例; (2)工厂模式:工厂帮我们创建对象,有一个专门帮我们创建对象的类,这...
Spring框架中提供了多种方式来创建bean实例,包括通过构造器、静态工厂方法和实例工厂方法等。这种方式可以让开发者更好地控制bean的创建过程,实现更多的自定义需求。 通过构造器方式创建bean实例 在Spring中,...
- **Global Session**:在Portlet应用中,全局Session范围内创建一个Bean实例。 4. **容器注册** - **XML配置**:在传统的Spring应用中,Bean的定义通常写在XML配置文件中,如`springbean-xml`中的配置。 - **...
在Spring框架中,静态工厂方法是一种创建Bean对象的方式,它允许我们通过调用类中的静态方法来实例化对象,而不是直接使用new关键字。这种方式在某些特定场景下非常有用,例如当我们需要控制对象的创建过程或者对象...
在Spring框架中,Bean的创建方式多样,其中两种常见的非XML配置方式是通过静态工厂方法和实例工厂方法来创建Bean。这些方法为Spring容器提供了更灵活的Bean实例化策略,让我们深入了解一下这两种方法。 首先,静态...
在上面的代码中,我们使用@Configuration注解来配置Bean的初始化和销毁,并使用@Bean注解来创建Bean实例。 四、总结 在本文中,我们详细讲解了Spring Bean的初始化和销毁,包括使用@Bean的initMethod和...
- 使用实例工厂方法实例化:类似于静态工厂方法,但工厂方法是非静态的,需要先创建工厂类的实例后再调用。 - Bean的配置: - id和name:id属性是Bean的标识符,name属性可以包含特殊字符,且可以有多个别名。 -...
在这个"Spring Bean简单应用实例"中,我们将深入理解这两个概念以及如何在实际应用中使用它们。 首先,控制反转(IoC)是一种设计模式,它将对象的创建和管理职责从应用代码中分离出来,转交给容器来处理。这样,...
除了构造器注入,Spring还支持通过静态工厂方法来创建Bean实例。这种方式不需要Bean类提供构造器,而是通过调用一个静态工厂方法来创建Bean。这种方法的优势在于它可以提供更多的灵活性,例如可以在创建Bean时进行...
一旦XML配置加载到Spring容器中,容器将根据配置创建Bean实例,并按照定义进行初始化、依赖注入,最后完成Bean的生命周期管理。 10. **实践操作**: 在实际开发中,我们可以使用Eclipse的Spring插件来简化Bean...
在Java代码中,使用`ClassPathXmlApplicationContext`加载XML配置文件,并通过Bean的ID获取并使用Bean实例。 ```java ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); MyService ...
Bean可以通过简单的构造函数、工厂方法或工厂Bean来创建。 工厂Bean是实现了`org.springframework.beans.factory.FactoryBean`接口的类。这个接口定义了两个核心方法:`getObject()`用于返回实际的业务对象,`...
现在,Spring会识别并处理带有`MyComponent`注解的类,根据注解的`value`属性来创建bean实例。这种方式减少了XML配置,使代码更加简洁、易读。 总结一下,自定义注解和基于注解的bean创建是Spring框架中强大的特性...