【spring bean】spring中bean的懒加载和depends-on属性设置

项目结构如下:

 

ResourceBean.java代码:

 1 package com.it.res;
 2
 3 import java.io.File;
 4 import java.io.FileNotFoundException;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7
 8 public class ResourceBean {
 9
10     private FileOutputStream out;
11     private File file;
12
13     public void init(){
14         System.out.println("初始化的方法!!!!!--->加载资源");
15         try {
16             this.out = new FileOutputStream(file);
17
18         } catch (FileNotFoundException e) {
19             e.printStackTrace();
20         }
21     }
22
23
24     public void destroy(){
25         System.out.println("销毁的方法!!!--->清理内存");
26         try {
27             out.close();
28         } catch (IOException e) {
29             e.printStackTrace();
30         }
31     }
32
33     public FileOutputStream getOut(){
34         return out;
35     }
36
37     public void setFile(File file){
38         this.file=file;
39     }
40 }

View Code

 

DependentBean.java代码:

 1 package com.it.res;
 2
 3 import java.io.IOException;
 4
 5 public class DependentBean {
 6     ResourceBean bean;
 7     public void write(String ss){
 8         System.out.println("写入资源");
 9         try {
10             bean.getOut().write(ss.getBytes());
11         } catch (IOException e) {
12             e.printStackTrace();
13         }
14     }
15
16     public void init(){
17         System.out.println("depen--->初始化");
18         try {
19             bean.getOut().write("depen---->初始化".getBytes());
20         } catch (IOException e) {
21             e.printStackTrace();
22         }
23     }
24
25     public void destroy(){
26         System.out.println("depen--->销毁");
27         try {
28             bean.getOut().write("depen--->销毁".getBytes());
29         } catch (IOException e) {
30             e.printStackTrace();
31         }
32     }
33
34     public ResourceBean getBean() {
35         return bean;
36     }
37
38     //设置注入
39     public void setBean(ResourceBean bean) {
40         this.bean = bean;
41     }
42
43
44
45 }

View Code

resWrite.xml代码:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans
 3 xmlns="http://www.springframework.org/schema/beans"
 4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5 xmlns:context="http://www.springframework.org/schema/context"
 6 xsi:schemaLocation="
 7 http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 8 http://www.springframework.org/schema/context                http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 9
10
11     <!-- init-method  指定初始化方法,在构造器注入和setter注入完毕后执行。    destroy-method   只有“singleton”作用域能销毁,“prototype”作用域的一定不能,其他作用域不一定能    lazy-init="true"表示懒加载,不提前初始化Bean,而是只有在真正使用时才创建及初始化Bean-->
12      <bean id="resourceBean" class="com.it.res.ResourceBean" init-method="init" destroy-method="destroy" lazy-init="true">
13          <property name="file" value="F:/test/a.txt"> </property><!-- Spring容器能自动把字符串转换为java.io.File   -->
14      </bean>
15
16     <!-- 指定depends-on  则resourceBean会在dependentBean之前初始化,在dependentBean销毁之后销毁-->
17     <bean id="dependentBean" class="com.it.res.DependentBean" init-method="init" destroy-method="destroy" depends-on="resourceBean">
18         <property name="bean" ref="resourceBean"></property>
19     </bean>
20
21 </beans>  

View Code

 

测试类Test.java代码:

 1 package com.it.res;
 2
 3 import org.springframework.context.support.FileSystemXmlApplicationContext;
 4
 5 public class Test {
 6
 7     @org.junit.Test
 8     public void testDepen(){
 9         FileSystemXmlApplicationContext app = new FileSystemXmlApplicationContext("resources/resWrite.xml");
10         //一定要注册销毁回调,否则我们定义的销毁方法不执行
11         app.registerShutdownHook();
12         DependentBean bean = (DependentBean) app.getBean("dependentBean");
13         bean.write("\r\n德玛西亚\r\n");
14     }
15 }

View Code

 

测试完成,控制打印如下:

 

文件写入:

 

时间: 2024-10-25 03:34:41

【spring bean】spring中bean的懒加载和depends-on属性设置的相关文章

DWR 导致 Spring bean 懒加载失效 何解?

问题描述 spring 中配置 bean lazy-init="true"但是应用启动时bean还是被初始化,通过排除配置文件发现配置dwr后,懒加载就不起作用.请问下,有知道是什么原因么?去掉dwr配置,懒加载就起作用. <!--spring DWR配置 --> <dwr:configuration> <dwr:convert type="bean" class="org.hibernate.validator.engine

Struts2在打包json格式的懒加载异常问题

版权声明:尊重博主原创文章,转载请注明出处哦~http://blog.csdn.net/eson_15/article/details/51394302         hibernate中如果出现了级联查询,就可能出现懒加载问题,比如我现在有个Account(管理员)类.Category(商品类别)和Product(商品)类,从左到右都是一对多的关系,而且从右到左都是设置了@ManyToOne(fetch=FetchType.LAZY).我现在要把商品信息查出来打包成json格式传到前台,我在

Struts2在打包json格式的懒加载异常问题_java

Hibernate中如果出现了级联查询,就可能出现懒加载问题,比如我现在有个Account(管理员)类.Category(商品类别)和Product(商品)类,从左到右都是一对多的关系,而且从右到左都是设置了@ManyToOne(fetch=FetchType.LAZY).我现在要把商品信息查出来打包成json格式传到前台,我在后台使用查询语句为:from Product p left join fetch p.category where p.name like:name  这样就可以把Pro

spring mvc-Spring mvc结合Hibernate中实现ajxa出现懒加载异常

问题描述 Spring mvc结合Hibernate中实现ajxa出现懒加载异常 我要实现一个选择省份加载城市列表,然后选择城市加载区列表的操作,但是我在加载城市的时候一直报懒加载异常,session提前关闭,我觉得是因为我城市中设置的private Province province 对象的原因,请问大神这有什么好的解决办法吗 解决方案 懒加载的话,你直接用fetch属性设为eager就行了,session提前关闭,,可能是你的openSessionInView,,这个过滤器没用,,而且省市区

spring 单例多例,默认,懒加载,初始化调用

(1)spring 默认是单例, 单例情况下:所有线程对于同一个类共同拥有一个对象,此时如果在类里面创建一个类变量如下 由于所有线程共享一个类对象,所以也共享一个类变量,每次请求都会增加 @Controller @RequestMapping("/user") public class User { private int i=0;//类变量 @RequestMapping("/list.shtm") public String list() { i++; Syst

hibernate+spring mvc, 解决hibernate 对象懒加载 json序列化问题

引用地址 在使用Spring MVC时,@ResponseBody 注解的方法返回一个有懒加载对象的时候出现了异常,以登录为例:   Java代码   @RequestMapping("login")       @ResponseBody       public Object login(@RequestParam String username,@RequestParam String password){           List<User> list=user

懒加载session-多数据源springmvc+hibernate 切换问题 在一次请求中多次切换不成功

问题描述 多数据源springmvc+hibernate 切换问题 在一次请求中多次切换不成功 最近写了一个多数据源的代码,结果在使用的过程中出现了在一个请求中(方法中)两个数据库交替使用的情况,最后情况是数据库切换不过来 并且在项目配置中有懒加载和OpenSessionInViewFilter 数据库一个为本地数据库一个为基金数据库 要做的事情就是在本地查询到基金代码接着再循环去基金库查询基金数据 中间报错为在本地数据库中查询不到某个表(其实是在基金库中) controller层 @Reque

GIX4中懒加载

在使用OpenExpressApp框架的GIX4项目中,对象的懒加载按照对象的性质不同,分为以下两种方式: 根对象类:     Get方法:获取根对象,并附带上第一级的子对象属性.     GetLazy方法:获取没有子对象属性的根对象.只在简单列表显示时使用.懒加载的思想在这里的体现,比较特殊,大致是这样的:当点击列表中某个对象A时,会使用Get方法获取一个新的对象B,并把它的值全部赋于A,这样,A就在被点击的时候,得到了它的所有子对象属性.非根对象类:     Get方法:获取此对象的一般属

在 Swift 中使用闭包实现懒加载

本文讲的是在 Swift 中使用闭包实现懒加载, 原文地址:Swift Lazy Initialization with Closures 原文作者:Bob Lee 译文出自:掘金翻译计划 译者:lsvih 校对者:zhangqippp,Zheaoli 在 Swift 中使用闭包实现懒加载 学习如何兼顾模块化与可读性来创建对象 图为苹果的 Magic Keyboard 2 与 Magic Mouse 2 亲爱的读者你们好!我是 Bob,很高兴能在这篇文章中与你们相遇!如你想加入我的邮件列表,获取