spring 二

spring 二bean的创建方式默认的构造函数创建通过工厂方法创建通过静态工厂方法创建bean的作用域Bean的延迟初始化bean的创建方式bean有三种创建方式默认的构造函数创建默认的创建方式在上一章里面也试过,为了方便复习。我就再搬运一份吧<bean name="userDao" class="com.caesar.spring.study.dao.impl.UserDaoI...
摘要由CSDN通过智能技术生成

bean的创建方式

bean有三种创建方式

默认的构造函数创建

默认的创建方式在上一章里面也试过,为了方便复习。我就再搬运一份吧

<bean name="userDao" class="com.caesar.spring.study.dao.impl.UserDaoImpl" />

可以参考官方文档
在这里插入图片描述

通过工厂方法创建

首先创建一个工厂:

package com.caesar.spring.study.factory;

import com.caesar.spring.study.dao.UserDao;
import com.caesar.spring.study.dao.impl.UserDaoImpl;

/**
 * @ClassName BeanFactory
 * @Author Caesar
 * @Date 2019/12/21 13:26
 * @Description
 */
public class BeanFactory {

    /**
     * 功能描述 定义一个创建UserDao的工厂方法
     * @author Caesar
     * @date 2019/12/21
     * @param
     * @return com.caesar.spring.study.dao.UserDao
     */
    public UserDao getInstance() {
        return new UserDaoImpl();
    }
}

xml配置

<!-- 使用工厂方法创建bean对象 -->
<beanname="factory" class="com.caesar.spring.study.factory.BeanFactory" />
<bean name="dao" factory-bean="factory" factory-method="getInstance" />

参考官方文档

在这里插入图片描述

通过静态工厂方法创建

package com.caesar.spring.study.factory;

import com.caesar.spring.study.dao.UserDao;
import com.caesar.spring.study.dao.impl.UserDaoImpl;

/**
 * @ClassName BeanFactory
 * @Author Caesar
 * @Date 2019/12/21 13:26
 * @Description
 */
public class BeanFactory {

    /**
     * 功能描述 定义一个创建UserDao的工厂方法
     * @author Caesar
     * @date 2019/12/21
     * @param
     * @return com.caesar.spring.study.dao.UserDao
     */
    public UserDao getInstance() {
        return new UserDaoImpl();
    }

    /**
     * 功能描述 定义创建UserDao的静态工厂方法
     * @author Caesar
     * @date 2019/12/21
     * @param
     * @return com.caesar.spring.study.dao.UserDao
     */
    public static UserDao getUserDaoInstance() {
        return new UserDaoImpl();
    }
}

xml配置

<bean name="dao2" class="com.caesar.spring.study.factory.BeanFactory" factory-method="getUserDaoInstance" />

参考官方文档
在这里插入图片描述

最后测试一下咯:

package com.caesar.spring.study.test;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @ClassName CreateBeanTest
 * @Author Caesar
 * @Date 2019/12/21 13:36
 * @Description
 */
public class CreateBeanTest {

    private ClassPathXmlApplicationContext ctx;

    @Before
    public void init() {
        ctx = new ClassPathXmlApplicationContext("/applicationContext-bean.xml");
    }

    @Test
    public void runTest() {
        System.out.println(ctx.getBean("userDao"));
        System.out.println(ctx.getBean("dao"));
        System.out.println(ctx.getBean("dao2"));
    }
    @After
    public void closeCtx() {
        ctx.close();
    }
}

// 看结果
/*
userDaoImpl 被实例化
userDaoImpl 被实例化
userDaoImpl 被实例化
com.caesar.spring.study.dao.impl.UserDaoImpl@38bc8ab5
com.caesar.spring.study.dao.impl.UserDaoImpl@687080dc
com.caesar.spring.study.dao.impl.UserDaoImpl@23d2a7e8
*/

静态工厂方法的创建是class,不是factory-bean,自己踩着坑了。复制粘贴了一下然后没有改

bean的作用域

默认的作用域是单例作用域。可以修改

<bean name="userDao" class="com.caesar.spring.study.dao.impl.UserDaoImpl" scope="singleton" />	<!-- 单例(spring容器中默认的创建对象方式 ) -->
<bean name="userDao" class="com.caesar.spring.study.dao.impl.UserDaoImpl" scope="prototype" />  <!-- 多例 -->

Bean的延迟初始化

prototype是默认延迟初始化
设置singleton的延迟初始化

<bean name="userDao" class="com.caesar.spring.study.dao.impl.UserDaoImpl" scope="singleton" lazy-init="true" />

设置全部延迟初始化

<?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"
        default-lazy-init="true">

    <bean name="userDao" class="com.caesar.spring.study.dao.impl.UserDaoImpl" scope="singleton" />
    <bean name="userDao" class="com.caesar.spring.study.dao.impl.UserDaoImpl" scope="prototype" />

</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值