spring实例化bean的时机以及作用域多例模式

先添加jar包

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <!--spring-core-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
        </dependency>
        <!--spring-bean-->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
        </dependency>
        <!--spring-context-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
        </dependency>
        <!--spring-expression-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
        </dependency>
    </dependencies>

第二步创建配置文件spring.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">
  
</beans>

第三步书写一个类User

package com.ioc13.entity;

/**
 * package_name:com.ioc13.entity
 * Author:徐亚远
 * Date:2020/2/6 15:15
 * 项目名:springDemo01
 * Desription:
 **/
public class User {
    private String userName;
    private String pasword;

    public User() {
        System.out.println("无参构造方法");
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public void setPasword(String pasword) {
        this.pasword = pasword;
    }

    public String getPasword() {
        return pasword;
    }
}

第四步 配置spring.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">
    <!--作用域
           scope取值
           singleton 单例
           prototype 非单例
           request 同一个请求中单例
           session 同一个会话中单例
    -->
    <bean id="user" class="com.ioc13.entity.User" scope="prototype" lazy-init="true">
        <property name="userName" value="admin"/>
        <property name="pasword" value="admin"/>
    </bean>

</beans>

第五步书写测试方法UserController

package com.ioc13.controller;

import com.ioc13.entity.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


/**
 * package_name:com.ioc13.controller
 * Author:徐亚远
 * Date:2020/2/6 15:17
 * 项目名:springDemo01
 * Desription:
 **/
public class UserController {
    public static void main(String args[]) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("/ioc13/spring.xml");
        User user = (User) ac.getBean("user");
        User user1 = (User) ac.getBean("user");
        System.out.println("user:" + user);
        System.out.println("user1:" + user1);
    }
}

测试结果:
在这里插入图片描述

实例化bean的时机

ApplicationContext容器

默认预先实例化,即在容器启动时实例化。

可以设置为懒实例化,即在第一次使用bean时实例化。

<bean id="user" factory-method="getUserBean" factory-bean="userbeanfactory" init-method="init" lazy-init="true">
    <constructor-arg name="username" value="${username}"/>
    <constructor-arg name="password" value="${password}"/>
</bean>

实际应用中都是预先实例化,虽然启动时较慢,但是用户访问时速度较快。

BeanFactory容器

只能懒实例化,使用bean时才会实例化。

Bean的作用域。

简介:

在IOC容器中bean默认是单例的,存在问题。

单例中bean的全局属性是线程不安全的,多线程并发访问会出现问题。数据不安全

设置scope属性来指定作用域,配置为非单例的

<!--作用域
       scope取值
       singleton 单例
       prototype 非单例
       request 同一个请求中单例
       session 同一个会话中单例
-->
<bean id="user" class="com.ioc13.entity.User" scope="singleton">
    <property name="userName" value="admin"/>
    <property name="pasword" value="admin"/>
</bean>
发布了64 篇原创文章 · 获赞 1 · 访问量 910

猜你喜欢

转载自blog.csdn.net/weixin_43311650/article/details/104198817
今日推荐