Spring配置文件

举报
执久呀 发表于 2022/10/22 21:02:10 2022/10/22
【摘要】 ​ 目录  Spring配置文件Bean标签基本配置Bean标签范围配置 无参构造创建时机Bean生命周期配置 Bean实例化三种方式  Spring配置文件Bean标签基本配置用于配置对象交由Spring来创建默认情况下他调用的是类中的无参构造函数,如果没有无参构造函数则不能创建成功。基本属性:id:Bean实例在Spring容器中的唯一标识class:Bean的限定名称Bean标签范围配...

 目录

  Spring配置文件

Bean标签基本配置

Bean标签范围配置

 无参构造创建时机

Bean生命周期配置

 Bean实例化三种方式



  Spring配置文件

Bean标签基本配置

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

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

基本属性:

id:Bean实例在Spring容器中的唯一标识

class:Bean的限定名称

Bean标签范围配置

scope:指对象的作用范围,取值如下:

取值范围 说明
singleton 默认值,单例的
prototype 多例的
request WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中
session WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中
global session WEB项目中,应用在Portlet环境,如果没有Porlet环境那么globalSession相当于session

 下pom.xml中配置junit的坐标

   <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>

 在test模块下创建text类

package com;

import com.Dao.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class text {
    @Test
    public void text1(){
        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);
   
    }
}


编辑


 使用singleton打印出来的地址一致说明容器中只有一份

编辑

 使用prototype打印出来的地址不一致说明容器中有多份

编辑

 无参构造创建时机

1)当scope的取值为singleton时

Bean的实例化个数:1个

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

Bean的生命周期:

  •    对象创建:当应用加载,创建容器时,对象就被创建了
  •    对象运行:只要容器在,对象一直活着
  •    对象销毁:当应用卸载,销毁容器时,对象就被销毁了

2)当scope取值为prototype时

Bean的实例化个数:多个

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

Bean的生命周期

  •    对象创建:当使用对象时,创建新的对象实例
  •    对象运行:只要对象在使用中,就一直活着
  •    对象销毁:当对象长时间不用时,被Java的垃圾回收器回收了

Bean生命周期配置

init-method:指定类中的初始化方法名称

destory-method:指定类中的销毁方法名称

在UserDaoImp类下

创建的初始化方法init和销毁方法destory(名字为任意的)


public class UserDaoImpl implements UserDao {
    public void play(){
        System.out.println("play and play...");
    }
    public UserDaoImpl(){
        System.out.println("UserDaoImpl被创建");
    }
    public void init(){
        System.out.println("初始化方法");
    }
    public void destory(){
        System.out.println("销毁方法");
    }
}

 在applicationContext.xml文件中指定初始化和销毁方法

 <bean id="userDao" class="com.Dao.impl.UserDaoImpl" 
    init-method="init" destroy-method="destory"
    ></bean>

 在UserDemo方法运行结果:

编辑

 Bean实例化三种方式

无参构造方法实例化

工厂静态方法实例化

工厂实例方法实例化

①:工厂静态方法实例化

创建一个factory包下

package com.factory;

import com.Dao.UserDao;
import com.Dao.impl.UserDaoImpl;

public class StaticFactory {
    public static UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

xml中配置:

<bean id="userDao" class="com.factory.StaticFactory" factory-method="getUserDao"></bean>

编辑

 在userDemo下运行,或者在test运行也可

编辑


② 工厂实例方法实例化演示

创建一个DynamicFactory类

import com.Dao.UserDao;
import com.Dao.impl.UserDaoImpl;

public class DynamicFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}


编辑


在applicationContext.xml中

<bean id="factory" class="com.factory.DynamicFactory" ></bean>
    <bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>
<!--第一bean表示创建工厂对象,第二个表示从factory容器获得getUserDao方法获得对象-->


编辑

其余代码不变,在text下运行得

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。