07-spring学习-bean的其他配置(了解)
首先需要明确,默认情况下,只要在applicationContext.xml文件里面配置的时候自动进行构造方法初始化。
但是用户也可以实现自己的配置,让其在第一次使用的时候进行初始化,这种操作叫做
延迟加载
lazy-init="true"
范例:延迟加载
public class Emp {
private Integer empno;
private String ename;
}
完整代码:
package com.Spring.Demo;
public class Emp {
private Integer empno;
private String ename;
public Emp() {
System.out.println("************");
}
public Integer getEmpno() {
return empno;
}
public void setEmpno(Integer empno) {
this.empno = empno;
}
public String getEname() {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
@Override
public String toString() {
return "Emp [empno=" + empno + ", ename=" + ename + "]";
}
}
不进行延迟加载的操作配置:
<bean id="emp" class="com.Spring.Demo.Emp">
<property name="empno" value="20"/>
<property name="ename" value="Fore"/>
</bean>
正常来说只要初始化applicationContext.xml就会执行构造方法初始化。
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
结果:调用了构造方法

延迟加载配置:
<bean id="emp" class="com.Spring.Demo.Emp" lazy-init="true">
<property name="empno" value="20"/>
<property name="ename" value="Fore"/>
</bean>
此时执行:
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
但是结果:并没有调用构造方法。

此时表示延迟加载,当第一次使用这个bean的时候再进行加载。
如下:
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
Emp emp=ctx.getBean("emp",Emp.class);
此时执行结果:

证明此时调用了构造方法进行初始化。
除了此特征:
进行自定义的初始化和销毁方法操作:
lazy-init="true",init-method="init"
例如:现在有一个类,可以在类实例化对象的时候自动执行一个方法进行特定的初始化调用,或者在这个类对象不再需要的时候自动进行销毁方法,
进行资源的释放。
范例:观察初始化和销毁。
package com.Spring.Demo;
public class Group {
public void init()
{
System.out.println("公司进行初始化");
}
public void destroy()
{
System.out.println("公司销毁");
}
}
实际上以上两个方法只有在spring中是可以使用的,而在java运行里面,初始化会依靠构造方法,销毁会依靠finalize()方法。
配置applicationContext()文件--需要明确指定初始化以及销毁方法。
<bean id="group" class="com.Spring.Demo.Group" init-method="init"
destroy-method="destroy"></bean>
执行结果:

运行了初始化操作,而没有运行销毁方法,默认情况下,初始化的操作一定会默认的自动出现,
但是销毁的操作必须明确处理。
调用过程:
package com.Spring.Demo;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestGroup { public static void main(String[] args) {
ClassPathXmlApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
Group grp=ctx.getBean("group",Group.class);
System.out.println(grp);
ctx.registerShutdownHook();//取消注册,触发销毁
}
}
注意:要想使用方法registerShutdownHook,取消注册,触发销毁事件,调用这个的ctx对象,必须是ApplicationContext类的子类:ClassPathXmlApplicationContext
实例化,父类ApplicationContext没有这个方法。
运行结果:

07-spring学习-bean的其他配置(了解)的更多相关文章
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- Spring学习--Bean 之间的关系
Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 ...
- spring的bean的注解配置
使用bean的方式配置spring 比较麻烦,开发的时候经常使用注解的方式配置spring. 第一步,创建java项目,导入jar包 第二步,创建spring 的主配置文件 第三步,创建实体类,加注解 ...
- Spring学习-Bean的基本概念知识
4月份开始复习一遍spring相关知识.让自己巩固一下spring大法的深奥益处,所以就看了大佬的博客,转载留下来日后继续研读.认为重点的标记为红色 转载自:http://www.cnblogs.co ...
- Spring配置文件-Bean生命周期配置(init-method方法,destory-method方法)
1.UserDaoImpl类 public class UserDaoImpl implements UserDao { public UserDaoImpl(){ System.out.printl ...
- Spring 学习——Bean容器
Bean容器初始化 基础 org.springframework.beans org.springframework.context BeanFactory提供配置结构和基本功能,加载并初始化Bean ...
- Spring学习--基于 XML 的配置声明切面
正常情况下 , 基于注解的生命要优先于基于 XML 的声明. 通过 AspectJ 注解 , 切面可以与 AspectJ 兼容 , 而基于 XML 的配置则是 Spring 专有的.由于 Aspect ...
- Spring学习-- Bean 的作用域
Bean 的作用域: 在 Spring 中 , 可以在 <bean> 元素的 scope 属性里设置 bean 的作用域. 默认情况下 , Spring 只为每个在 IOC 容器里声明的 ...
- Spring(Bean)4 配置数据源、连接池
<!-- 配置数据源 Mysql c3p0: 连接池. <bean id="dataSource" class="com.mchange.v2.c3p0.Co ...
随机推荐
- 使用ICSharpCode.SharpZipLib+Aspose模板批量导出Word
由于是Web端的项目,所以点击按钮之后直接从Aspose模板读取数据,然后在内存中操作,而不是下载到本地后再打包弄到内存中下载.废话不多说,直接上代码 public ActionResult Expo ...
- [xsy3241]暴风士兵
题意:一个血量为$h$的人,它会被攻击$n$次,第$i$次有$p$的概率$-1$滴血(每次的$p$不同),问每次攻击后他的血量期望,强制在线 若一个人被扣了$i$滴血的概率为$p_i$,那么记多项式$ ...
- 4425: [Nwerc2015]Assigning Workstations分配工作站
4425: [Nwerc2015]Assigning Workstations分配工作站 Description Penelope is part of the admin team of the n ...
- python基础之条件判断和循环
1.条件判断 age = 3 if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid' ...
- new placement 的使用
#include <iostream> #include "TModel.h" int main() { ]; std::cout<<"Sourc ...
- word标题编号变成黑块
把光标放置在黑块的后面 在键盘上按左方向键,则黑块变灰色(为选中状态) 然后ctrl+shift+s, 出现窗口“apply styles" 点击"reapply", 搞 ...
- Http和Https网络同步请求httpclient和异步请求async-http-client
原文:https://blog.csdn.net/fengshizty/article/details/53100694 Http和https网络请求 主要总结一下使用到的网络请求框架,一种是同步网络 ...
- python wheel 包命名规则和 abi 兼容
wheel 包的命名规定 wheel 包的命名格式为 {distribution}-{version}(-{build tag})?-{python tag}-{abi tag}-{platform ...
- 流畅的python第三章字典和集合学习记录
什么是可散列的数据类型 如果一个对象是可散列的,那么在这个对象的生命周期中,他的散列值是不变的,而且这个对象需要实现__hash__()方法.另外可散列对象还要有__qe__()方法.这样才能跟其他键 ...
- oracle 10g函数大全--字符型函数
ASCII(x1) [功能]:返回字符表达式最左端字符的ASCII 码值. [参数]:x1,字符表达式 [返回]:数值型 [示例] SQL> select ascii('A') A,ascii( ...