首先需要明确,默认情况下,只要在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没有这个方法

运行结果:

最新文章

  1. mysql环境搭建
  2. Attempt to insert non-property list object 报错原因
  3. Windows api实现桌面任务栏隐藏\显示
  4. Android源码编译出错解决办法
  5. TCP/ip协议栈之内核调优
  6. Java 13 字符串
  7. 初识vi编辑器
  8. (火炬)MS SQL Server数据库案例教程
  9. JS 深拷贝
  10. 本地存储 cookie,session,localstorage( 一)基本概念及原生API
  11. 关于echarts地图下钻。
  12. VHDL和verilog应该先学哪个?
  13. shell 脚本实现定时备份mysql数据库
  14. return 返回值
  15. BZOJ3583 杰杰的女性朋友 矩阵
  16. Python交互图表可视化Bokeh:1. 可视交互化原理| 基本设置
  17. 剑指offer(26)二叉搜索树与双向链表
  18. Unexpected error from external database driver (1)
  19. AT91RM9200---定时器简介
  20. Xpath做数据解析

热门文章

  1. android 内存泄漏检测工具 LeakCanary 泄漏金丝雀
  2. luogu P2485 [SDOI2011]计算器
  3. Codeforces 550 D. Regular Bridge
  4. BZOJ 2467 [中山市选2010]生成树(组合数学)
  5. 【计算几何】【凸包】Gym - 101164H - Pub crawl
  6. concat函数,concat_ws函数,group_concat函数,repeat()函数
  7. Java原始封装常用HttpRequest
  8. winform 中设置窗体的默认焦点
  9. linux安装Node(Centos)
  10. ajax跨域的解决方案