当前位置:首页 > 经验 >

bean生命周期的四个阶段(bean的生命周期可以引用的接口)

来源:原点资讯(www.yd166.com)时间:2022-11-01 14:03:51作者:YD166手机阅读>>

Bean的生命周期可以简单分为11个周期:

1.构造方法。不管是反射获取和静态工厂获取都会调用Bean嵌套类的构造方法。

2.封装属性。封装Bean嵌套 类 的属性,值可以在对应xml文件的<Bean>标签内用<property>设置

3.实现BeanNameAware接口,实现setBeanName()方法。该方法是用来设置Bean的name,传来的值为xml里该Bean的Id值

4.实现BeanfactoryAware接口,实现setBeanFactory()方法。不设置的话有默认DefaultListableBeanFactory类。

5.重点。在Xml文件里配置实现BeanPostProcessor的类,实现接口的postProcessBeforeInitialization()方法,是预处理方法。比如权限的访问可以在这个方法中进行设置

6.实现InitializingBean接口,实现afterPropertiesSet()方法

7.调用自定义Bean初始化函数,初始化的方法需要在对应的类里面配,而且要写到xml文件里的init-method属性中

8.重点。在Xml文件里配置实现BeanPostProcessor的类,实现postProcessAfterInitialization()方法,后处理方法。和第七步在同一类下。

9.调用业务方法,调用获取到对象的方法即可。

10.实现DisposableBean接口,实现destroy()方法,父容器关闭时会调用。

11.实现自定义destory()方法,关闭时调用。

Xml文件 :


  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <bean id="MyStudentStaticService" class="com.baidu.student.MyStudentStaticService" init-method="initMy" destroy-method="desMy" factory-method="getStudentService">
  7. <property name="name" value="aa"></property>
  8. </bean>
  9. <bean class="com.baidu.student.MyBeanProcess"></bean>
  10. </beans>

Bean嵌套的对象:


  1. package com.baidu.student;
  2. import org.springframework.beans.BeansException;
  3. import org.springframework.beans.factory.BeanFactory;
  4. import org.springframework.beans.factory.BeanFactoryAware;
  5. import org.springframework.beans.factory.BeanNameAware;
  6. import org.springframework.beans.factory.DisposableBean;
  7. import org.springframework.beans.factory.InitializingBean;
  8. public class StudentService implements BeanNameAware,BeanFactoryAware,InitializingBean,DisposableBean{
  9. private String name;
  10. public String getName() {
  11. return name;
  12. }
  13. //--------------bean的11个声明周期----------------
  14. public StudentService(String a) {
  15. System.out.println("1.调用Bean对应的类构造方法");
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. System.out.println("2.封装属性 属性值在对应的Bean的xml文件里写---" name);
  20. }
  21. @Override
  22. public void setBeanName(String name) {
  23. //这个name==studentService
  24. System.out.println("3.实现BeanNameAware接口,实现setBeanName()方法---" name);
  25. }
  26. @Override
  27. public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
  28. //
  29. System.out.println("4.实现BeanFactoryAware接口,实现setBeanFactory()方法----Factory为" beanFactory.getClass());
  30. }
  31. //第五步在BeanProcess实现类里
  32. @Override
  33. public void afterPropertiesSet() throws Exception {
  34. System.out.println("6.实现InitializingBean接口,实现afterPropertiesSet()方法");
  35. }
  36. public void initMy() {
  37. System.out.println("7.调用自定义Bean初始化函数,初始化的方法需要在对应的类里面配,而且要写到xml文件里");
  38. }
  39. //第八步在BeanProcess实现类里
  40. public void say() {
  41. System.out.println("9.调用业务方法,使用获取到的类的方法");
  42. }
  43. @Override
  44. public void destroy() throws Exception {
  45. System.out.println("10.实现DisposableBean接口,实现destroy()方法");
  46. }
  47. public void desMy() {
  48. System.out.println("11.实现自定义destory()方法,关闭时调用");
  49. }
  50. }

继承Bean类:


  1. package com.baidu.student;
  2. import org.springframework.beans.BeansException;
  3. import org.springframework.beans.factory.config.BeanPostProcessor;
  4. public class MyBeanProcess implements BeanPostProcessor{
  5. //该类需要在xml文件中配置
  6. @Override
  7. public Object postProcessAfterInitialization(Object bean, String name) throws BeansException {
  8. System.out.println("8.重点。在Xml文件里配置实现BeanPostProcessor的类,实现postProcessAfterInitialization()方法,后处理方法");
  9. return bean;
  10. }
  11. @Override
  12. public Object postProcessBeforeInitialization(Object bean, String name) throws BeansException {
  13. System.out.println(name);
  14. System.out.println("5.重点。在Xml文件里配置实现BeanPostProcessor的类,实现接口的postProcessBeforeInitialization()方法,预处理方法");
  15. return bean;
  16. }
  17. }

测试方法:


  1. public class Test2 {
  2. @Test
  3. public void test() {
  4. ClassPathXmlapplicationContext applicationContext=new ClassPathXmlApplicationContext("beans2.xml");
  5. StudentService studentService = (StudentService) applicationContext.getBean("MyStudentStaticService");
  6. studentService.say();
  7. System.out.println(studentService.getName());
  8. applicationContext.close();
  9. }
  10. }

结果:

bean生命周期的四个阶段,bean的生命周期可以引用的接口(1)

栏目热文

bean的生命周期讲解(bean的生命周期可以引用的接口)

bean的生命周期讲解(bean的生命周期可以引用的接口)

前言在 Spring 中,那些组成应用程序的主体及由 Spring IOC 容器所管理的对象,被称之为 bean。简单地...

2022-11-01 13:56:24查看全文 >>

beanfactory和factorybean的区别(beanfactory和factorybean区别)

beanfactory和factorybean的区别(beanfactory和factorybean区别)

前言理解factoryBean是非常非常有必要的,因为在Spring中FactoryBean最为典型的一个应用就是用来创...

2022-11-01 14:06:17查看全文 >>

spring三大核心原理(java必背100个知识点)

spring三大核心原理(java必背100个知识点)

面试官拿起程序员小马的简历看了看,原本平平无奇的内容丝毫提不起面试官的兴趣,看到技能那一栏时,突然出现的“精通”二字显得...

2022-11-01 14:19:24查看全文 >>

java生命周期七个过程(java生命周期一览表)

java生命周期七个过程(java生命周期一览表)

前言首先来了解一下jvm(java虚拟机)中的几个比较重要的内存区域,这几个区域在java类的生命周期中扮演着比较重要的...

2022-11-01 14:27:17查看全文 >>

spring生命周期七个过程(java生命周期七个过程)

spring生命周期七个过程(java生命周期七个过程)

推荐阅读:Springbean的生命周期在面试中,我们经常会被问到一个问题,就是SpringBean的生命周期。用大白话...

2022-11-01 13:40:59查看全文 >>

bean的生命周期面试题(bean生命周期五个阶段)

bean的生命周期面试题(bean生命周期五个阶段)

Spring作为当前Java最流行、最强大的轻量级框架。Spring Bean的生命周期也是面试高频题,了解Spring...

2022-11-01 14:20:55查看全文 >>

十个springboot面试题(springboot的常见15道面试题)

十个springboot面试题(springboot的常见15道面试题)

做 Java 开发,没有人敢小觑 Spring Boot 的重要性,现在出去面试,无论多小的公司 or 项目,都要跟你扯...

2022-11-01 13:58:28查看全文 >>

bean的生命周期图解(bean生命周期五个阶段)

bean的生命周期图解(bean生命周期五个阶段)

专注于Java领域优质技术,欢迎关注 整理:搜云库技术团队在网上已经有跟多Bean的生命周期的博客,但是很多都是基于比较...

2022-11-01 13:58:45查看全文 >>

bean的三个生命周期简述(bean的生命周期可以引用的接口)

bean的三个生命周期简述(bean的生命周期可以引用的接口)

spring作为当前java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring bean的生命周...

2022-11-01 13:53:07查看全文 >>

spring注入bean的方法(spring注入有状态的bean)

spring注入bean的方法(spring注入有状态的bean)

来源:blog.csdn.net/weixin_43741092/article/details/120176466将b...

2022-11-01 14:05:30查看全文 >>

文档排行