04 spring中bean的工厂方法

接下来我们将看一下spring中bean的相关工厂方法。

1、前提约束

2、操作步骤

2.1 静态工厂

  • 确保net.wanho.entity.User.java类存在
  • 在src/main/java文件夹下创建net.wanho.factory.StaticFactory.java,内容如下:
import net.wanho.entity.User;

import java.util.HashMap;
import java.util.Map;

public class StaticFactory {
    static Map<String, User> map = new HashMap<>();
    static{
        map.put("101",new User(1,"ali"));
        map.put("102",new User(2,"zhangli"));
    }

    public static User get(String id) {
        return map.get(id);
    }
}
  • 在src/main/resources文件夹下创建bean-factory.xml文件,内容如下:
<?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.xsd">
    <bean id="user" class="net.wanho.factory.StaticFactory" factory-method="get">
        <constructor-arg value="101"></constructor-arg>
    </bean>
</beans>

2.2 实例工厂

  • 在src/main/java文件夹下创建net.wanho.factory.StaticFactory.java,内容如下:
import net.wanho.entity.User;

import java.util.HashMap;
import java.util.Map;

public class InstanceFactory {
    private Map<String, User> map = new HashMap<>();
    {
        map.put("101",new User(1,"ali"));
        map.put("102",new User(2,"xiaoli"));
    }

    public User getInstacne(String id)
    {
        return this.map.get(id);
    }
}
  • 在src/main/resources的bean-factory.xml文件中加入以下内容:
    <bean id="factory" class="net.wanho.factory.InstanceFactory"></bean>

    <bean id="user1" factory-bean="factory" factory-method="getInstacne">
        <constructor-arg value="101"></constructor-arg>
    </bean>

2.3 FactoryBean

  • 在src/main/java文件夹下创建net.wanho.factory.UserFactoryBean.java,内容如下:
import net.wanho.entity.User;
import org.springframework.beans.factory.FactoryBean;

public class UserFactoryBean implements FactoryBean<User> {
    private int id;
    @Override
    public User getObject() throws Exception {
        return new User(id,"xiaoli");
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}
  • 在src/main/resources的bean-factory.xml文件中加入以下内容:
    <bean id="user2" class="net.wanho.factory.UserFactoryBean">
        <property name="id" value="123"></property>
    </bean>

2.4 测试,在src/main/java文件夹下创建TestBeanFactory.java,内容如下:

import net.wanho.entity.User;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestBeanFactory {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean-factory.xml");

        //测试静态工厂
        User user = applicationContext.getBean("user", User.class);
        System.out.println();

        //测试实例工厂
        User user1 = applicationContext.getBean("user1 ",User .class);

        //测试FactoryBean
        User user2 = applicationContext.getBean("user2",User.class);
    }
}

以上就是spring中bean的工厂方法。

猜你喜欢

转载自www.cnblogs.com/alichengxuyuan/p/12554735.html