首页 > 技术文章 > spring bean 配置(XML)

xsdf 2017-10-18 08:21 原文

Bean的初始化方法

Spring提供三种方式初始化Bean对象
类构造器初始化(主流)
静态工厂方法初始化(非主流)
实例工厂方法初始化(非主流)

 

1、类构造器初始化
 Spring读取加载的Bean的class,调用对应class的无
参构造方法,实例化对象
如果没有提供无参构造方法,Spring将无法初始化Bean实例
 applicationContext.xml中配置对应的Bean
<bean id=" bean1 " class="com.bdyc.spring.beanInit.Bean1"></bean>
 获取Bean对象使用ApplicationContext对象进行
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
Bean1 bean1 = (Bean1) ctx.getBean(“bean1");

eg:

//实体类
public class UserBean {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public UserBean() {
        System.out.println("UserBean.UserBean()无参构造方法");
    };
    public UserBean(String name,int age) {
        System.out.println("UserBean.UserBean()有参构造方法");
        this.name = name;
        this.age = age;
    }
}

<!--Bean(spring)配置文件-->
<?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="userBean" class="com.wd.bean.UserBean"></bean>
</beans>
//测试类
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.wd.bean.UserBean;

public class Test {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserBean user = (UserBean) ac.getBean("userBean");
    
    }
}

输出结果:

2、静态工厂初始化(了解)
 静态工厂初始化方法是为了兼容早期项目的改造,目
前已经基本不使用此方式获取Bean实例
 Bean实例的获取需要使用工厂类中的静态方法获取
 提供工厂类,包含静态方法获取Bean实例
public class Bean2Factory {
public static Bean2 getInst(){
return new Bean2();
}
}
静态工厂初始化(了解)
 applicationContext.xml中配置对应的Bean
<bean id="bean2"
class="com.bdyc.spring.beanInit.Bean2Factory" factory-method="getInst">
</bean>
class:配置工厂类的全路径名
factory-method:配置工厂类获取实例的静态方法名
 获取Bean对象使用ApplicationContext对象进行
ApplicationContext ctx = new
ClassPathXmlApplicationContext("applicationContext.xml");
Bean2 bean2 = (Bean2) ctx.getBean(“bean2");

eg:①调用无参构造方法(默认调用)

//实体类如上

/*
 *静态工厂
 */
public class UserFactory {
    public static User getUserBean(){
        return new User();//调用无参构造方法
    }
}

<!--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="com.wd.bean.UserFactory" factory-method="getUserBean"></bean>
</beans>

/**
 *测试类
 */
public class Test {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user =  (User) ac.getBean("user");
        System.out.println(user);
    }
}

输出结果:

②:调用有参构造方法:

public class UserFactory {
    public static User getUserBean(){
        return new User("张三",20);
    }
}

输出结果:

 三、实例工厂初始化(了解)  Bean实例的获取需要使用工厂类中的实例方法获取  提供工厂类,包含实例方法获取Bean实例 public class Bean3Factory { public Bean3 getInst(){ return new Bean3(); } }  由于使用实例工厂需要先创建实例工厂的对象,因此 在配置时,实例工厂将作为一个Bean出现,受Spring 控制,配置实例工厂的Bean 实例工厂初始化(了解)  applicationContext.xml中配置对应的Bean factory-bean :配置实例工厂Bean的名称 factory-method:配置实例工厂类获取实例的方法名  获取Bean对象使用ApplicationContext对象进行 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); Bean3 bean3 = (Bean3) ctx.getBean(“bean3");

eg:

//实体类如上

/**
 * 非静态工厂模式
 * @author Thinkpad
 *
 */
public class UserFactory {
    public  User getUserBean(){
        return new User();
    }
}

<!--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">
    <!-- 1、首先创建UserFactory对象(实例化工厂bean)2、通过工厂bean调用工厂生成bean的方法 -->
    <bean id="factoryBean" class="com.wd.bean.UserFactory"></bean>
    
    <bean id="userBean" factory-bean="factoryBean" factory-method="getUserBean"></bean>
</beans>

/**
 * 测试类
 * @author Thinkpad
 *
 */
public class Test {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user =  (User) ac.getBean("userBean");
        System.out.println(user);
    }
}

输出结果:

推荐阅读