spring

spring,第1张

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列表

     <dependency>
                <groupId>junitgroupId>
                <artifactId>junitartifactId>
                <version>4.11version>
                <scope>testscope>
     dependency>
    
  3. 在applicationContext.xml中添加scope,改变scope的值观察变化

    <bean id="userDao" class="com.WU.dao.impl.UserDaoImpl" scope="singlet/prototype">bean>
    
  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的回收站回收

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/786839.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-05
下一篇 2022-05-05

发表评论

登录后才能评论

评论列表(0条)

保存