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

简介: 项目结构如下:   ResourceBean.java代码: 1 package com.it.res; 2 3 import java.io.File; 4 import java.

项目结构如下:

 

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

 

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

 

文件写入:

 

相关文章
|
14天前
|
缓存 Java Spring
实战指南:四种调整 Spring Bean 初始化顺序的方案
本文探讨了如何调整 Spring Boot 中 Bean 的初始化顺序,以满足业务需求。文章通过四种方案进行了详细分析: 1. **方案一 (@Order)**:通过 `@Order` 注解设置 Bean 的初始化顺序,但发现 `@PostConstruct` 会影响顺序。 2. **方案二 (SmartInitializingSingleton)**:在所有单例 Bean 初始化后执行额外的初始化工作,但无法精确控制特定 Bean 的顺序。 3. **方案三 (@DependsOn)**:通过 `@DependsOn` 注解指定 Bean 之间的依赖关系,成功实现顺序控制,但耦合性较高。
实战指南:四种调整 Spring Bean 初始化顺序的方案
|
1月前
|
XML Java 数据格式
Spring从入门到入土(bean的一些子标签及注解的使用)
本文详细介绍了Spring框架中Bean的创建和使用,包括使用XML配置文件中的标签和注解来创建和管理Bean,以及如何通过构造器、Setter方法和属性注入来配置Bean。
67 9
Spring从入门到入土(bean的一些子标签及注解的使用)
|
1月前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
1月前
|
存储 Java API
简单两步,Spring Boot 写死的定时任务也能动态设置:技术干货分享
【10月更文挑战第4天】在Spring Boot开发中,定时任务通常通过@Scheduled注解来实现,这种方式简单直接,但存在一个显著的限制:任务的执行时间或频率在编译时就已经确定,无法在运行时动态调整。然而,在实际工作中,我们往往需要根据业务需求或外部条件的变化来动态调整定时任务的执行计划。本文将分享一个简单两步的解决方案,让你的Spring Boot应用中的定时任务也能动态设置,从而满足更灵活的业务需求。
86 4
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
80 1
|
1月前
|
Java Spring
获取spring工厂中bean对象的两种方式
获取spring工厂中bean对象的两种方式
40 1
|
1月前
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细介绍了Spring框架中的核心概念——Spring Bean的生命周期,包括实例化、属性赋值、接口回调、初始化、使用及销毁等10个阶段,并深入剖析了相关源码,如`BeanFactory`、`DefaultListableBeanFactory`和`BeanPostProcessor`等关键类与接口。通过理解这些核心组件,读者可以更好地掌握Spring Bean的管理和控制机制。
85 1
|
2月前
|
XML Java 数据格式
spring复习03,注解配置管理bean
Spring框架中使用注解配置管理bean的方法,包括常用注解的标识组件、扫描组件、基于注解的自动装配以及使用注解后的注意事项,并提供了一个基于注解自动装配的完整示例。
spring复习03,注解配置管理bean
|
5月前
|
Java 开发者 Spring
解析Spring中Bean的生命周期
解析Spring中Bean的生命周期
56 2
|
5月前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
62 0