首先需要明确,默认情况下,只要在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的其他配置(了解)的更多相关文章

  1. 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比

    [原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...

  2. Spring学习--Bean 之间的关系

    Bean 之间的关系:继承.依赖. Bean 继承: Spring 允许继承 bean 的配置 , 被继承的 bean 称为父 bean , 继承这个父 bean 的 bean 称为子 bean. 子 ...

  3. spring的bean的注解配置

    使用bean的方式配置spring 比较麻烦,开发的时候经常使用注解的方式配置spring. 第一步,创建java项目,导入jar包 第二步,创建spring 的主配置文件 第三步,创建实体类,加注解 ...

  4. Spring学习-Bean的基本概念知识

    4月份开始复习一遍spring相关知识.让自己巩固一下spring大法的深奥益处,所以就看了大佬的博客,转载留下来日后继续研读.认为重点的标记为红色 转载自:http://www.cnblogs.co ...

  5. Spring配置文件-Bean生命周期配置(init-method方法,destory-method方法)

    1.UserDaoImpl类 public class UserDaoImpl implements UserDao { public UserDaoImpl(){ System.out.printl ...

  6. Spring 学习——Bean容器

    Bean容器初始化 基础 org.springframework.beans org.springframework.context BeanFactory提供配置结构和基本功能,加载并初始化Bean ...

  7. Spring学习--基于 XML 的配置声明切面

    正常情况下 , 基于注解的生命要优先于基于 XML 的声明. 通过 AspectJ 注解 , 切面可以与 AspectJ 兼容 , 而基于 XML 的配置则是 Spring 专有的.由于 Aspect ...

  8. Spring学习-- Bean 的作用域

    Bean 的作用域: 在 Spring 中 , 可以在 <bean> 元素的 scope 属性里设置 bean 的作用域. 默认情况下 , Spring 只为每个在 IOC 容器里声明的 ...

  9. Spring(Bean)4 配置数据源、连接池

    <!-- 配置数据源 Mysql c3p0: 连接池. <bean id="dataSource" class="com.mchange.v2.c3p0.Co ...

随机推荐

  1. 【数论】【二次剩余】【map】hdu6128 Inverse of sum

    部分引用自:http://blog.csdn.net/v5zsq/article/details/77255048 所以假设方程 x^2+x+1=0 在模p意义下的解为d,则答案就是满足(ai/aj) ...

  2. 【扫描线】Gym - 101190E - Expect to Wait

    假设初始人数为0, 将每个时刻在等待的人数写下来,就是求个和. 如果纵坐标看成人数,横坐标看成时间,就是求个面积. 因为初始人数不一定为零,所以离线后扫描线即可回答所有询问. #include< ...

  3. 【最小割】BZOJ3438-小M的作物(Rank 2???!!!)(含新款Dinic模板)

    一开始被T掉了之后,才害怕地发现之前写的Dinic基本上都是错的??!!!正确的写在注释里了,注意一下(;3<)馬鹿やろ 一个丧心病狂的优化前后效率对比:

  4. Python学习笔记 | 关于python数据对象 hashable & unhashable 的理解

    文章目录 写在前面 hashable & unhashable mutable & immutable 实例检测 后续思考 参考文章 写在前面 Hash(哈希.散列)是一个将大体量数据 ...

  5. [转]MySQL 数据类型(二)

    MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数.许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 MySQL 允许我们指定数值字段 ...

  6. [转]基于全注解的Spring3.1 mvc、myBatis3.1、Mysql的轻量级项目

    摘要 对于现在主流的j2ee企业级开发而言,ssh(struts+hibernate+spring)依然是一个事实的标准.由struts充当的mvc调度控制:hibernate的orm持久化映射:sp ...

  7. ejs循环实例

    ... //index page var items=[{title:"文章1"},{title:"文章2"}]; app.get('/',function(r ...

  8. 利用require.js实现javascript模块化加载

    这种引入很看到很想死吧! <script src="1.js"></script> <script src="2.js">& ...

  9. 【特别好】【位运算】maximum-xor-of-two-numbers-in-an-array

    https://leetcode.com/problems/maximum-xor-of-two-numbers-in-an-array/ 利用了异或的”自反性“: a ^ b = c,而a ^ b ...

  10. Java笔记17:导出可执行jar包

    这里介绍Java程序的两种导出可执行jar包的方式,一种是图形界面打包,另一种是命令行打包. 一.图形界面打包 1 建立名为JarDemo的JavaProject,在src目录下建立com.abc的P ...