【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 单例:也就是使用的是同一个对象
prototype 非单例:常用于对象内部是有属性保存状态的,该对象运行一次,内部的属性需要给下次的执行。
Bean 实例化
使用 构造方法 实例化
Bean的实例化,也是从
构造方法
开始,容器内部是使用反射机制
完成的
<bean id="nameDao" class="cn.bigdataboy.dao.impl.NameDaoImpl" scope="singleton"/>
这里有个小问题,如果是 非单例模式
,会输出两次构造函数的打印
使用工厂函数实例化
需要继承
FactoryBean
,重写getObject
getObjectType
,isSingleton
需要再写
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>
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
接口才有,不然是不会调用销毁的。
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}