Spring之实例化bean的三种方式

Bean的实例化

  Bean的实例化有三种方式:构造器实例化、静态工厂方式实例化、实例工厂方式实例化。

  • 构造器实例化

Spring容器通过Bean对应的默认的构造函数来实例化Bean,在上一篇博客中的两个例子以及如上的xml文件中bean的配置,都是通过构造器的方式来实例化Bean的,因此我们在此不做过多的说明。

  • 静态工厂方式实例化

该方式首先要求创建一个静态工厂类,然后在类中定义一个静态方法来创建Bean实例,静态工厂类及静态方法的代码如下:

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>

复制代码

  • 实例工厂方式实例化

    该种方式的工厂类中,不再使用静态方法创建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>

复制代码

好像只有这些代码和xml配置文件无法运行啊,缺少主函数,看看我们的Client主函数,主函数内代码如下:

复制代码

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方法
    }

转载:https://www.cnblogs.com/zhanglei93/p/6221546.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值