栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring

1.Bean标签基本配置

用于配置对象交由Spring来创建;

默认情况下他调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。

基本属性:

  • id:Bean实例在Spring容器中的唯一标识
  • class:Bean的全限定名称

Bean标签范围配置

scope:对象作用范围

取值范围说明
singleton默认值,单例的(不配scope时)(自动调用无参构造函数)
prototype多例的
requestWEB项目中,Spring创建一个Bean的对象,将对象存入到request域中
sessionWEB项目中, Spring创建一个Bean的对象,将对象存入到session域中
global sessionWEB项目中,应用在Portlet环境,如果没有Portlet环境那么globalSession相当于session

Test:(测试scope的属性)

  1. 在test的Java下新建类com.WU.test.SpringTest

  2. 在项目的pom.xml中添加junit测试依赖;并刷新maven列表

     
                junit
                junit
                4.11
                test
     
    
  3. 在applicationContext.xml中添加scope,改变scope的值观察变化

    
    
  4. 新建的测试类代码:

    package com.WU.test;
    import com.WU.dao.UserDao;
    import org.junit.Test;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    public class SpringTest {
        @Test
        // 测试scope属性
        public  void test1(){
            ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserDao userDao1 =(UserDao) app.getBean("userDao");
            UserDao userDao2 =(UserDao) app.getBean("userDao");
            System.out.println(userDao1);//打印1的位置
            System.out.println(userDao2);//打印2的位置
        }
    }//观察二者地址是否一样
    
  5. prototype时:(不一样)多个对象

    com.WU.dao.impl.UserDaoImpl@67205a84
    com.WU.dao.impl.UserDaoImpl@7d0587f1
    
  6. singlet时:(一样)单个对象

    com.WU.dao.impl.UserDaoImpl@1c3a4799
    com.WU.dao.impl.UserDaoImpl@1c3a4799
    
关于默认时调用无参构造函数
  1. 当scope为singlet时;在此处加断点,调试单步执行
    public  void test1(){
断点     ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");  一
        UserDao userDao1 =(UserDao) app.getBean("userDao"); 二
        UserDao userDao2 =(UserDao) app.getBean("userDao"); 三
        System.out.println(userDao1);
        System.out.println(userDao2);
  • 发现结果
UserDaoImpl创建....
  • 此时并没有获得userDao的Bean;说明在配置文件时,创建spring容器时(即执行一时)此对象UserDaoImpl已被创建
  1. 当scope为prototype时;仍在此处加断点,调试单步执行
  • 发现结果

    无打印;说明配置文件时对象未创建;点击步过F8

    在二步和三步后都出现了UserDaoImpl创建…

    说明在此时getBean时创建对象

UserDaoImpl创建....
UserDaoImpl创建....

综上:

  1. 当scope取值为singleton时

    Bean的实列化个数:1个

    Bean的实例化时机:Spring核心文件被加载时,实例化配置Bean实例

    Bean的生命周期:

    • 对象创建:当应用加载,创建容器时,对象就被创建了
    • 对象运行:只要容器在,对象就活着
    • 对象销毁:当应用卸载,销毁容器时,对象被销毁
  2. 当scope取值为prototype时

    Bean实例化个数:多个

    时机:当调用getBean方法时实例化Bean

    生命周期:

    • 对象创建:当使用对象时,创建新的对象实例

    • 对象运行:只要对象在使用中

    • 对象销毁:当对象长时间不用时,被Java的回收站回收

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/841231.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号