首先需要明确,默认情况下,只要在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. 解决PHPExcel列超过26的问题

    $column = PHPExcel_Cell::stringFromColumnIndex(index);//index对应的就是列,从0开始 $objPHPExcel->getActiveS ...

  2. [ARC097F]Monochrome Cat

    题意:一棵树,每个节点是黑色或白色,你可以从任意节点开始进行一些操作并在任意节点结束,如果当前在$x$,那么一次操作可以是:1.走到相邻节点$y$并翻转$y$的颜色,2.翻转$x$的颜色,问把所有节点 ...

  3. [LOJ2553]暴力写挂

    锟题x2 以下用$a\rightarrow b$表示端点为$a,b$的链 把式子写成$(h_1(x)+h_1(y)-h_1(lca))-h_2(lca')$,第一部分就是$x\rightarrow r ...

  4. 【最优比率生成树】poj2728 Desert King

    最优比率生成树教程见http://blog.csdn.net/sdj222555/article/details/7490797 个人觉得很明白易懂,但他写的代码略囧. 模板题,但是必须Prim,不能 ...

  5. 小Z的城市之旅

    题目大意: 从(0,0)走到(x,y),每次可以向上下左右走一格,问走r步刚好到(x,y)的方案数. 思路: 找规律发现答案就是C((r+x-y)/2,r)*C((r-x-y)/2,r). #incl ...

  6. svn安装和配置

    安装svn 参考http://blog.csdn.net/dl425134845/article/details/41978541 系统版本 uname -a # 查看内核/操作系统/CPU信息 he ...

  7. JS操作小数运算,结果莫名其妙出现多位小数问题

    Number类型: Number类型是ECMAScript中最常用和最令人关注的类型了:这种类型使用IEEE754格式来表示整数和浮点数值(浮点数值在某些语言中也被成为双精度数值),为支持各种数据类型 ...

  8. Chrome下flash无法显示多个的问题。

    $(document).ready(function(){ if(window.navigator.appVersion.match(/Chrome/)) { jQuery('object').eac ...

  9. 【mysql】mysql增加version字段实现乐观锁,实现高并发下的订单库存的并发控制,通过开启多线程同时处理模拟多个请求同时到达的情况 + 同一事务中使用多个乐观锁的情况处理

    mysql增加version字段实现乐观锁,实现高并发下的订单库存的并发控制,通过开启多线程同时处理模拟多个请求同时到达的情况 ==================================== ...

  10. Android内存优化14 内存泄漏常见情况5 特殊对象造成的内存泄漏 WebView内存泄漏

    WebView造成内存泄露 关于WebView的内存泄露,因为WebView在加载网页后会长期占用内存而不能被释放,因此我们在Activity销毁后要调用它的destory()方法来销毁它以释放内存. ...