java bean的生命周期,java bean作用域

  java bean的生命周期,java bean作用域

  00-1010 1.bean的作用域1.1 Watch case 1.2作用域的定义1.3 Bean的六个作用域1.4如何设置Bean的作用域 @ scope(可配置Bean factory . scope _ prototype)@ scope(" prototype ")注:2。bean的生命周期2.1 bean的执行过程2.2 bean的生命周期2.3生命周期演示代码配置测试运行主代码xml检查结果

  

目录

 

  00-1010现在有一个公共Bean。

  @ component public class UserBean { @ Bean public User User 1(){ User User=new User();user . setid(1);User.setName(张三);user . setage(18);返回用户;}}现在有一个用户1执行了修改后的操作。

  @ controller public class UserControllerA { @ auto wired private User User 1;公共用户get User 1(){ User User=User 1;system . out . println( user 1修改前的3360 user 1);User.setName(王五);返回用户;}}现在有用户2,正在阅读。

  @ controller public class UserControllerB { @ auto wired private User User 1;公共用户get User 1(){ User User=User 1;返回用户;}}打印用户1和用户2的公共Bean的值。

  public static void main(String[]args){ application context context=new classpathmlaplicationcontext( spring . XML );UserControllerA UserControllerA=context . getbean( UserControllerA ,UserControllerA . class);user user=usercontrollera . get user 1();System.out.println(用户1修改后的 3360 用户);UserControllerB UserControllerB=context . get bean( UserControllerB ,UserControllerB . class);用户user 1=usercontrollerb . get user 1();System.out.println (3360 user1被user2读取);}运行结果

  原因:

  默认情况下,Spring Bean的范围是singleton singleton模式。每个人都使用相同的对象。

  00-1010之前提到的作用域是指程序中定义的某个变量的某个区域,称为作用域。这里的Bean范围是不同的。

  Bean的范围是指Spring的整个框架中: Bean的某个行为模式,

  例如,singleton singleton范围意味着整个Spring中只有一个Bean,并且是全局共享的。然后,当其他人修改这个值时,另一个人会读取修改后的值。

  00-1010当Spring容器初始化一个Bean的实例时,它也指定了该实例的范围。

  Spring有六个范围。

  Singleton:单实例范围prototype:原型范围(多实例范围)请求:请求范围会话:回复范围ap

  plication: 全局作用域websocket: HTTP WebSocket 作用域3~6 这四种是 Spring MVC 中的值.

  

 

  

1.4 如何设置 Bean 的作用域

@Scope 既可以用于方法注解, 也可以用于类注解

 

  

 

  

① @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

 

  

 

  

 

  

② @Scope(prototype)

 

  

 

  

 

  

注意事项:

如果是 @Bean + @Scope , 这里的@Scope 就不能写成类注解的方式了.

 

  

 

  

 

  

2. Bean 的生命周期

 

  

2.1 Bean 的执行流程

启动 Spring 容器加载 Spring 配置文件加载 Spring 配置文件中的 Bean, 或根据配置文件中的组件根路径, 进行 Bean 对象的扫描(扫描@Controller…)Bean 注册到 Spring 中执行完毕,执行销毁操作

 

  

 

  

2.2 Bean 生命周期

Bean 的生命周期分为 5 大部分:

 

  实例化 Bean (为Bean分配内存空间)

  设置属性 (Bean 进行初始化注入)

  Bean 初始化 (一系列准备工作)

  ① 各种通知 (xxxAware)

  ② 执行初始化前置方法 BeanPostProcessor

  ③ 执行 @PostConstruct 初始化方法

  ④ 执行 init-mehtod 初始化方法

  ⑤ 执行初始化后置方法 BeanPostProcessor

  使用 Bean

  销毁 Bean

  ① 执行销毁前方法 @PreDestory② 如果有接口 DisposableBean, 执行实现方法③ 执行销毁前的方法 destory-method

 

  

 

  

2.3 生命周期演示代码

 

  

主要代码

package com.wwzz.util;import org.springframework.beans.factory.BeanNameAware;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;@Componentpublic class BeanLifeComponent implements BeanNameAware { @Override public void setBeanName(String s) { System.out.println("执行通知: BeanNameAware " + s); } @PostConstruct public void postConstruct(){ System.out.println("执行 @PostConstruct"); } public void init() { System.out.println("执行 init-method"); } @PreDestroy public void preDestroy(){ System.out.println("执行 @PreDestroy"); } public void destroy() { System.out.println("执行 destroy"); }}

 

  

xml 的配置

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:content="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置 Spring 扫描的根路径(此根路径下的所有 Spring 存对象的注解才能生效) --> <content:component-scan base-package="com.wwzz"></content:component-scan> <beans> <bean id="beanLifeComponent" class="com.wwzz.util.BeanLifeComponent" init-method="init" destroy-method="destroy"></bean> </beans></beans><?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:content="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置 Spring 扫描的根路径(此根路径下的所有 Spring 存对象的注解才能生效) --> <content:component-scan base-package="com.wwzz"></content:component-scan> <beans> <bean id="beanLifeComponent" class="com.wwzz.util.BeanLifeComponent" init-method="init" destroy-method="destroy"></bean> </beans></beans>

 

  

测试运行

 public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); BeanLifeComponent beanLifeComponent = context.getBean("beanLifeComponent",BeanLifeComponent.class); context.destroy(); }

 

  

查看结果

 

  到此这篇关于Java深入讲解Bean作用域与生命周期的文章就介绍到这了,更多相关Bean作用域与生命周期内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: