{{format('0')}} {{format('261')}} {{format('3231')}}

【Spring】 核心概念:Bean 配置 & Bean 实例化 & Bean 生命周期 [ 编程杂谈 ]

大数据男孩 文章 正文

想做一个技术博客,奈何实力不够
分享

明妃

{{nature("2022-09-12 18:36:16")}}更新

Bean基础配置

格式

<?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">

    <!--  管理对象  -->
    <bean id="nameDao" name="dao dao2,dao3" class="cn.bigdataboy.dao.impl.NameDaoImpl"/>
</beans>

属性列表

属性 描述
id Bean 唯一标识
name Bean 的别名,多个由逗号分号 隔开
class 该 Bean 的类路径
scope 作用范围,用于规定获取的 Bean 是否是单例的(默认是 singleton 单例)

scope 属性

singleton 单例:也就是使用的是同一个对象

mark

prototype 非单例:常用于对象内部是有属性保存状态的,该对象运行一次,内部的属性需要给下次的执行。

mark

Bean 实例化

使用 构造方法 实例化

Bean的实例化,也是从构造方法开始,容器内部是使用反射机制完成的

<bean id="nameDao" class="cn.bigdataboy.dao.impl.NameDaoImpl" scope="singleton"/>

这里有个小问题,如果是 非单例模式,会输出两次构造函数的打印

mark

使用工厂函数实例化

需要继承 FactoryBean,重写 getObject getObjectTypeisSingleton 需要再写

package cn.bigdataboy.factory;

import cn.bigdataboy.dao.NameDao;
import cn.bigdataboy.dao.impl.NameDaoImpl;
import org.springframework.beans.factory.FactoryBean;

public class NameDaoFactoryBean implements FactoryBean<NameDao> {
    @Override
    public NameDao getObject() throws Exception {
        return new NameDaoImpl();
    }

    @Override
    public Class<?> getObjectType() {
        return NameDaoImpl.class;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }
}

配置文件只需要这样写

<!--    使用 FactoryBean 方式实例化 Bean-->
<bean id="nameDao" class="cn.bigdataboy.factory.NameDaoFactoryBean"></bean>

mark

Bean 生命周期

生命周期其实很好理解,就是 创建销毁 这样一个过程,既然有这样一个概念,那就可以控制相应阶段做不同的事。

Spring 的实现方式还是使用 配置属性,指定相应方法

初始化方法 和 销毁方法

import cn.bigdataboy.dao.NameDao;
import cn.bigdataboy.service.impl.NameServiceImpl;

public class NameDaoImpl implements NameDao {

    public NameDaoImpl(){
        System.out.println("NameDaoImpl constructor running ...");
    }

    public void getName() {
        System.out.println("getName: bigdataboy");
    }

    public void init(){ // 初始化方法
        System.out.println("name dao init ...");
    }

    public void destory(){ // 销毁方法
        System.out.println("name dao destory ...");
    }
}

配置文件,指定 相应方法

<bean id="nameDao" class="cn.bigdataboy.dao.impl.NameDaoImpl" init-method="init" destroy-method="destory"/>

销毁方法,需要修改成 ClassPathXmlApplicationContext 接口才有,不然是不会调用销毁的。

mark

评论 0
0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}
TOP 2
Spark 2.0 单机模式与集群模式 安装

{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读

TOP 3
Office 2016 Pro Plus 激活

{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读

TOP 4
Linux上 MySQL 开启远程登陆的两种方法

{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读

TOP 5
Linux 安装 MySQL 5.7

{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读

目录

标签云

Java Spring

一言

# {{hitokoto.data.from || '来自'}} #
{{hitokoto.data.hitokoto || '内容'}}
作者:{{hitokoto.data.from_who || '作者'}}
自定义UI
配色方案

侧边栏