SpringBean的配置详解 --中

本文介绍了Spring框架中Bean的懒加载(lazy-init)特性,如何配置初始化和销毁方法,以及通过接口InitializingBean和工厂方法(包括静态和实例化工厂)来实例化Bean的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

Bean的初始化和销毁方法配置

 Bean的初始化和销毁方法配置

 扩展

 Bean的实例化


Bean的初始化和销毁方法配置

当lazy-init设置为true时为延迟加载,也就是当Spring容器加载的时候,不会立即创建Bean实例,等待用到时再创建Bean实例并存储到单例池中,后续在使用Bean直接从单例池获取即可,本质上Bean还是单例的

  <bean  id="userDao" name="dao" class="com.xfy.dao.Impl.UserDaoImpl" lazy-init="true"  ></bean>

 Bean的初始化和销毁方法配置

Bean在被实例化后,可以执行指定的初始化方法完成一些初始化的操作,Bean在销毁之前也可以执行指定的销毁方法完成一些操作

 <bean  id="userDao" name="dao" class="com.xfy.dao.Impl.UserDaoImpl" lazy-init="true" init-method="init" destroy-method="destroy" ></bean>

public class UserDaoImpl implements UserDao{
    public UserDaoImpl() {
        System.out.println("UserDaoImpl无参方法执行");
    }

    public  void  init(){
        System.out.println("初始化完成");
    }
    public  void destroy(){
        System.out.println("快销毁了");
    }
    public void run() {
        System.out.println("run》》》》》》");
    }
}
 扩展

除此之外,我们还可以通过实现InitializingBean接口,完成一些Bean初始化操作

package com.xfy.dao.Impl;

import com.xfy.dao.UserDao;
import org.springframework.beans.factory.InitializingBean;

public class UserDaoImpl implements UserDao,InitializingBean{
    public UserDaoImpl() {
        System.out.println("UserDaoImpl无参方法执行");
    }

    public  void  init(){
        System.out.println("初始化完成");
    }
    public  void destroy(){
        System.out.println("快销毁了");
    }
    public void run() {
        System.out.println("run》》》》》》");
    }
//在属性设置之后
    public void afterPropertiesSet() throws Exception {
        System.out.println("afterPropertiesSet.....");
    }
}
 Bean的实例化
    <bean  id="userDao" name="dao" class="com.xfy.dao.Impl.UserDaoImpl" lazy-init="true" >
<!--        构造参数-->
        <constructor-arg name="name" value="xfy"></constructor-arg>
    </bean>

//有参构造方法
   public UserDaoImpl(String name) {
        System.out.println("UserDaoImpl无参方法执行");
    }

//默认为无参构造方法

 工厂方法实例化:底层通过调用自定义的工厂方法对Bean进行实例化

  • 静态工厂方法实例化Bean

<bean id="userDao1" class="com.xfy.factory.MyBeanFactory1" factory-method="userDao"></bean>

package com.xfy.factory;

import com.xfy.dao.Impl.UserDaoImpl;
import com.xfy.dao.UserDao;

public class MyBeanFactory1 {
    public static UserDao userDao(){
//        Bean创建之前可以进行一些其它操作
        return  new UserDaoImpl();
    }
}

  
有参:
       <bean id="userDao1" class="com.xfy.factory.MyBeanFactory1" factory-method="userDao">
          <constructor-arg name="name" value="xfy"></constructor-arg>
      </bean>

 实例工厂方法实例化Bean

package com.xfy.factory;

import com.xfy.dao.Impl.UserDaoImpl;
import com.xfy.dao.UserDao;
//实例化工厂方法
//与静态工厂方法不同的是实例化工厂调用方法的前提是要有一个实例化的对象,调用非静态方法
public class MyBeanFactory2 {
    public  UserDao userDao(){
//        Bean创建之前可以进行一些其它操作
        return  new UserDaoImpl();
    }
}

<!--    实例化一个对象-->
    <bean class="com.xfy.factory.MyBeanFactory2" id="beanFactory2"></bean>
<!--    实现实例化工厂-->
    <bean id="userDao2" factory-bean="beanFactory2" factory-method="userDao"></bean>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值