首页 > 其他分享 >5_Spring_Bean的生命周期

5_Spring_Bean的生命周期

时间:2023-07-30 12:46:46浏览次数:50  
标签:www 生命周期 Spring bean springframework Bean beans org public

5_Spring_Bean的生命周期

bean从创建到销毁经历的各个阶段以及每个阶段所调用的方法

1 通过构造器创建bean实例           执行构造器

2 为bean属性赋值                         执行set方法

3 初始化bean                                调用bean的初始化方法,需要配置指定调用的方法

4 bean的获取                                容器对象 getBean方法

5 容器关闭销毁bean                      调用销毁方法,需要配置指定调用的方法

测试生命周期

准备bean

  1. package com.msb.bean;
  2. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  3. */
  4. public class User {
  5.  **private** Integer userid;
    
  6.  **private** String username;
    
  7.  **private** String password;
    
  8. **public** **void** **initUser**(){
    
  9.     System.**out**.println("第三步:User初始化");
    
  10. }
    
  11. **public** **User**() {
    
  12.     System.**out**.println("第一步:User构造");
    
  13. }
    
  14. **public** **void** **destoryUser**(){
    
  15.     System.**out**.println("第五步:User销毁");
    
  16. }
    
  17. @Override
    
  18. **public** String **toString**() {
    
  19.     **return** "User{" +
    
  20.             "userid=" + userid +
    
  21.             ", username='" + username + '\'' +
    
  22.             ", password='" + password + '\'' +
    
  23.             '}';
    
  24. }
    
  25. **public** **User**(Integer userid, String username, String password) {
    
  26.     **this**.userid = userid;
    
  27.     **this**.username = username;
    
  28.     **this**.password = password;
    
  29. }
    
  30. **public** **void** **setUserid**(Integer userid) {
    
  31.     System.**out**.println("setUserid");
    
  32.     **this**.userid = userid;
    
  33. }
    
  34. **public** **void** **setUsername**(String username) {
    
  35.     System.**out**.println("第二步:User属性赋值");
    
  36.     **this**.username = username;
    
  37. }
    
  38. **public** **void** **setPassword**(String password) {
    
  39.     **this**.password = password;
    
  40. }
    
  41. }

配置bean

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
  3.     xmlns:p="http://www.springframework.org/schema/p"
    
  4.     xmlns:c="http://www.springframework.org/schema/c"
    
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans
    
  6.     http://www.springframework.org/schema/beans/spring-beans.xsd">
    
  7.  <**bean** id="user" class="com.msb.bean.User" init-method="initUser"
    
    destroy-method="destoryUser">
  8.      <**property** name="username" value="xiaoming"></**property**>
    
  9. </**bean**>
    
  10. </beans>

测试bean

  1. package com.msb.test;
  2. import com.msb.bean.User;
  3. import org.junit.Test;
  4. import org.springframework.context.ApplicationContext;
  5. import org.springframework.context.support.ClassPathXmlApplicationContext;
  6. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  7. */
  8. public class Test1 {
  9. @Test
    
  10. **public** **void** **testGetBean**(){
    
  11.     ClassPathXmlApplicationContext context =**new**
    
    ClassPathXmlApplicationContext("applicationContext.xml");
  12.     User user = context.getBean("user",User.class);
    
  13.     System.out.println("第四步:User对象从容器中获取");
    
  14.     // 关闭容器
    
  15.     context.close();
    
  16. }
    
  17. }

关于后置处理器

1 通过构造器创建bean实例           执行构造器

2 为bean属性赋值                         执行set方法

3 把bean实例传递给bean的后置处理器的方法

4 初始化bean                                调用bean的初始化方法,需要配置指定调用的方法

5 把bean实例传递给bean的后置处理器的方法

6 bean的获取                                容器对象 getBean方法

7 容器关闭销毁bean                      调用销毁方法,需要配置指定调用的方法

1 创建后置处理器 实现 BeanPostProcesser  重写两个方法

  1. package com.msb.beanProcesser;
  2. import org.springframework.beans.BeansException;
  3. import org.springframework.beans.factory.config.BeanPostProcessor;
  4. /**
    • @Author: Ma HaiYang
    • @Description: MircoMessage:Mark_7001
  5. */
  6. public class MyBeanProcesser implements BeanPostProcessor {
  7.  @Override
    
  8. public Object postProcessBeforeInitialization(Object bean, String
    
    beanName) throws BeansException {
  9.     //Object bean      实例化的bean
    
  10.     //String beanName  bean的id
    
  11.     System.out.println("bean:初始化方法之前");
    
  12.     return bean;// 这里必须return bean
    
  13. }
    
  14. @Override
    
  15. public Object postProcessAfterInitialization(Object bean, String
    
    beanName) throws BeansException {
  16.     System.out.println("bean:初始化方法之后");
    
  17.     return bean;// 这里必须returnbean
    
  18. }
    
  19. }

2 配置后置处理器,对容器中的所有bean添加后置处理器的生命周期

  1. <beans xmlns="http://www.springframework.org/schema/beans"
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    
  3.     xmlns:p="http://www.springframework.org/schema/p"
    
  4.     xmlns:c="http://www.springframework.org/schema/c"
    
  5.     xsi:schemaLocation="http://www.springframework.org/schema/beans
    
  6.     http://www.springframework.org/schema/beans/spring-beans.xsd">
    
  7.  <bean id="user" class="com.msb.bean.User" init-method="initUser"
    
    destroy-method="destoryUser">
  8.      <property name="username" value="xiaoming"></property>
    
  9. </bean>
    
  10. <bean id="myBeanProcesser"
    
    class="com.msb.beanProcesser.MyBeanProcesser">

BeanPostProcessor接口作用:

如果我们想在Spring容器中完成bean实例化、配置以及其他初始化方法前后要添加一些自己逻辑处理。我们需要定义一个或多个BeanPostProcessor接口
现类,然后注册到Spring IoC容器中。

1、接口中的两个方法都要将传入的bean返回,而不能返回null,如果返回的是null那么我们通过getBean方法将得不到目标。

2、ApplicationContext会自动检测在配置文件中实现了BeanPostProcessor接口的所有bean,并把它们注册为后置处理器,然后在容器创建bean的适当时候调用它,因此部署一个后置处理器同部署其他的bean并没有什么区别。而使用BeanFactory实现的时候,bean 后置处理器必须通过代码显式地去注册,在IoC容器继承体系中的ConfigurableBeanFactory接口中定义了注册方法


Generated with Mybase Desktop 8.2.13

标签:www,生命周期,Spring,bean,springframework,Bean,beans,org,public
From: https://www.cnblogs.com/01way/p/17591272.html

相关文章

  • 4_Spring_XML方式实现DI
    4_Spring_XML方式实现DIspring中的Bean的管理:Bean(汉译咖啡豆).又称JAVABean.其实就是JAVA程序程序中的一个个对象,所以Bean的管理其实就是spring对于JAVA程序中的对象的管理管理的内容是什么1对象的创建 IOCIOC 叫做控制反转,就是Spring给我们创建对象,然后我们直......
  • 9_Spring_JDK动态代理
    9_Spring_JDK动态代理代理模式是通过代理对象访问目标对象,这样可以在目标对象基础上增强额外的功能,如添加权限,访问控制和审计等功能。房产中介代替业主卖房静态代理静态代理中代理类与被代理类都需要实现同一个接口,这就说明我们的一个静态代理类只能代理一个类,并且还要事先......
  • 8_Spring_注解方式管理bean
    8_Spring_注解方式管理bean1注解方式创建对象IOC导入依赖aop@Component  放在类上,用于标记,告诉spring当前类需要由容器实例化bean并放入容器中该注解有三个子注解@Controller 用于实例化controller层bean@Service    用于实例化service层bean@Repositor......
  • 7_Spring_使用外部属性配置文件
    7_Spring_使用外部属性配置文件spring容器可以读取.properties属性配置文件,可以将文件中的信息注入给bean例如,引入Druid数据源,配置连接池信息1 导入Druid依赖和mysql-connector依赖<dependency><groupId>com.alibaba</groupId><artifa......
  • 13_Spring_AOPXML方式实现_了解
    13_Spring_AOPXML方式实现_了解1、创建两个类,增强类和被增强类,创建方法见之前的代码2、在spring配置文件中创建两个类对象 3、在spring配置文件中配置切入点<aop:config><!--切入点--><aop:pointcutid="pointCutAdd"expression="execution......
  • 12_Spring_AOP注解方式实现_掌握
    12_Spring_AOP注解方式实现_掌握AspectJ本身并不是spring框架中的组成部分,是一个独立的AOP框架,一般把AspectJ和Spring框架的AOP依赖一起使用,所以要导入一个独立的依赖实现的两种方式1基于注解方式实现(熟练)2基于XML配置方式(了解)准备工作1导入依赖<!-......
  • 11_Spring_AOP概念和原理
    11_Spring_AOP概念和原理AOP切面编程一般可以帮助我们在不修改现有代码的情况下,对程序的功能进行拓展,往往用于实现日志处理,权限控制,性能检测,事务控制等AOP实现的原理就是动态代理,在有接口的情况下,使用JDK动态代理,在没有接口的情况下使用cglib动态代理为Dao层所有的......
  • 10_Spring_CGLIB动态代理
    10_Spring_CGLIB动态代理proxy动态代理面向接口1必须有接口和实现类2增强接口中定义的方法3只能读取接口中方法的上注解cglib动态代理模式面向父类packagecom.msb.testCglib;importorg.junit.Test;importorg.springframework.cglib.proxy.Enhancer;importorg.s......
  • 14_Spring_JDBCTemplate的使用
    14_Spring_JDBCTemplate的使用JdbcTemplate概述JdbcTemplate是spring框架中提供的一个对象,是对原始繁琐的JdbcAPI对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和,操作nosql数据库的RedisTemplate,操作消息队列的JmsTemplate等等......
  • 1_Spring概念介绍_了解
    1_Spring概念介绍_了解Spring是分层的全栈式的轻量级开发框架,以IOC和AOP为核心,官网是https://spring.ioSpring版本情况Spring优势1方便解耦,简化开发Spring通过容器,将对象的创建从代码中剥离出来,交给Spring控制,避免直接编码造成模块之间的耦合度高,用户也不必自己编......