Bean实例化的三种方式

1. 构造器实例化

spring容器通过bean对应的默认的构造函数来实例化bean。

2. 静态工厂方式实例化

首先创建一个静态工厂类,在类中定义一个静态方法创建实例。

静态工厂类及静态方法:

public class MyUserDaoFactory{
	//静态方法,返回UserDaoImpl的实例对象
	public static UserDaoImpl createUserDao{
		return new UserDaoImpl();
	}
}

xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
       "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
       <!-- 将指定对象配置给spring,让spring创建其实例 -->
       <bean id="userDao" class="com.ioc.MyUserDaoFactory" factory-method="createUserDao"/>
</beans>

3. 实例工厂方式实例化

该种方式的工厂类中,不再使用静态方法创建Bean实例,而是采用直接创建Bean实例的方式。同时在配置文件中,需要实例化的Bean也不是通过class属性直接指向其实例化的类,而是通过factory-bean属性配置一个实例工厂,然后使用factory-method属性确定使用工厂中哪个方法。

工厂类方法:

public class MyBeanFactory{
    public MyBeanFactory(){
        System.out.println("this is a bean factory");
    }
    public UserDaoImpl createUserDao(){
        return new UserDaoImpl();
    }
}

xml配置文件

<?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="myBeanFactory" class="com.ioc.MyBeanFactory"/>
   <!-- 使用factory-bean属性配置一个实例工厂,使用factory-method属性确定工厂中的哪个方法 -->
   <bean id="userDao" factory-bean="myBeanFactory" factory-method="createUserDao"/>
</beans>

主函数

public class Client {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //此处定义xml文件放置的位置为src目录下的com/xml目录下
        String path = "com/xml/bean.xml";
        ApplicationContext application = new ClassPathXmlApplicationContext(path);
        UserDaoImpl userDao = (UserDaoImpl) application.getBean("userDao");
        userDao.sayHello();   //调用UserDaoImpl类的sayHello方法
    }
}
posted @ 2018-12-05 18:06  RosaDarker  阅读(1962)  评论(0编辑  收藏  举报