有关Spirng ioc的BeanPostProcessor接口案例

简介: 有关Spirng ioc的BeanPostProcessor接口案例

关于spring里面的BeanPostProcessor接口的调用,每一个实现了该接口的类,一旦被注入到了spring容器里面之后,那么spring容器在进行相应的类实例化的时候,会对每一个类进行拦截,判断该类是否有实现该接口。


案例代码:


student


package com.sise.lh.lab01;
/**
 * 作者:idea
 * 时间:2017/9/14
 * 使用说明:学生bean
 */
public class Student {
    private int age;
    private String name;
    public void init(){
        this.age=18;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
复制代码


package com.sise.lh.lab01;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
 * 作者:idea
 * 时间:2017/9/28
 * 使用说明:只要有一个bean实现了这个接口,就一定会将所有的bean都做一次拦截
 */
public class StudentCheck implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        if(beanName.equals("student")) {
            Student student= (Student) bean;
            student.setAge(18);
            student.setName("idea");
            System.out.println("this is postProcessBeforeInitialization");
        }
        return bean;
    }
    @Override
    public Object postProcessAfterInitialization(Object bean, String s) throws BeansException {
        System.out.println("this is postProcessAfterInitialization");
        return bean;
    }
}
复制代码


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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="student" class="com.sise.lh.lab01.Student"></bean>
    <bean id="studentCheck" class="com.sise.lh.lab01.StudentCheck"></bean>
</beans>
复制代码


案例测试:


package com.sise.lh.lab01;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * 作者:idea
 * 时间:2017/9/28
 * 使用说明:案例测试
 */
public class DemoTest {
    public static void main(String[] args) {
        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("lab01/spring-config01.xml");
        Student student= (Student) applicationContext.getBean("student");
        System.out.println(student.getAge());
        System.out.println(student.getName());
    }
}
复制代码


控制台输出结果:


this is postProcessBeforeInitialization
this is postProcessAfterInitialization
18
idea
复制代码


使用上述的思路,我们在对于相应的bean进行初始化操作或者是某些校验的时候,可以进行相应的拦截操作。

目录
相关文章
|
缓存 监控 安全
【实现每秒1,000,000个请求的秒杀接口】
【实现每秒1,000,000个请求的秒杀接口】
311 0
|
Java 开发者 UED
Spring Boot的全局异常处理机制
【2月更文挑战第13天】
1051 0
|
存储 缓存 关系型数据库
【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略
【MySQL进阶-08】深入理解innodb存储格式,双写机制,buffer pool底层结构和淘汰策略
1301 0
|
监控 Java 开发者
掌握SpringBoot扩展接口:提升代码优雅度的16个技巧
【10月更文挑战第20天】 SpringBoot以其简化配置和快速开发而受到开发者的青睐。除了基本的CRUD操作外,SpringBoot还提供了丰富的扩展接口,让我们能够更灵活地定制和扩展应用。以下是16个常用的SpringBoot扩展接口,掌握它们将帮助你写出更加优雅的代码。
434 0
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
642 0
|
12月前
|
开发框架 Java UED
如何使用 Spring Boot 实现异常处理
如何使用 Spring Boot 实现异常处理
506 2
|
数据采集 缓存 NoSQL
三级缓存实操系列(一)
三级缓存实操系列(一)
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
216 6
|
消息中间件 存储 SQL
Kafka架构及其原理
Kafka架构及其原理
1103 1
|
Rust 并行计算 安全
揭秘Rust并发奇技!线程与消息传递背后的秘密,让程序性能飙升的终极奥义!
【8月更文挑战第31天】Rust 以其安全性和高性能著称,其并发模型在现代软件开发中至关重要。通过 `std::thread` 模块,Rust 支持高效的线程管理和数据共享,同时确保内存和线程安全。本文探讨 Rust 的线程与消息传递机制,并通过示例代码展示其应用。例如,使用 `Mutex` 实现线程同步,通过通道(channel)实现线程间安全通信。Rust 的并发模型结合了线程和消息传递的优势,确保了高效且安全的并行执行,适用于高性能和高并发场景。
405 0