手写Spring简要逻辑02 --依赖注入,Aware回调,初始化,BeanPostProcessor,AOP模拟实现

电信光猫隐藏的VOIP功能揭秘:不用座机也能打电话(EasySip实战) 本文揭秘了电信光猫隐藏的VOIP功能,通过EasySip实战演示如何无需座机实现高清通话。详细解析了光猫的SIP协议支持、语音VLAN配置及网络架构优化,帮助用户利用现有设备提升通话质量并扩展设备兼容性,特别适合智能家居企业级应用场景。 阅读详情

学习链接

1 DI

新建OrderService

package com.tes.service;
import com.spring.Component;

@Component("orderService")
public class OrderService {
}

新建Autowired注解

package com.spring;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.FIELD})//可写在方法和属性上
public @interface Autowired {
    
}

在这里插入图片描述
添加Atuowired注解后需要spring来实现注入

怎么注入?

在创建bean时实现,通过getBean

在这里插入图片描述

2 Aware

spring中的Aware接口
在这里插入图片描述

创建BeanNameAware 接口

package com.spring;

public interface BeanNameAware {
    void setBeanName(String name);
}

在这里插入图片描述
在这里插入图片描述

3 init

在这里插入图片描述

模拟初始化

创建InitializingBean接口

在这里插入图片描述
在这里插入图片描述

4 BeanPostProcessor

spring对bean初始化前后提供的一个拓展

新建BeanPostProcessor接口

package com.spring;

public interface BeanPostProcessor {
    //初始化前
    Object postProcessBeforeInitialization(Object bean, String beanName);
    //初始化后
    Object postProcessAfterInitialization(Object bean, String beanName);
}

实现

package com.tes.service;

import com.spring.BeanPostProcessor;
import com.spring.Component;

@Component
public class BeanPostProcessorImpl implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        if (beanName.equals("userService")){
            System.out.println("初始化前");
            ((UserService)bean).setName("雷好呀");
        }
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        System.out.println("初始化后");
        return bean;
    }
}

在这里插入图片描述

在这里插入图片描述

Test测试

在这里插入图片描述

AOP

  1. 代理对象
    如何生成代理对象(初始化后)
    针对userservice生成一个对象

  2. 执行业务

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) {
        System.out.println("初始化后");
        if (beanName.equals("userService")){
            Object proxyInstance = Proxy.newProxyInstance(
                    BeanPostProcessorImpl.class.getClassLoader(),
                    bean.getClass().getInterfaces(),
                    new InvocationHandler() {
                        @Override
                        public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                            System.out.println("代理逻辑");
                            return method.invoke(bean, args);
                        }
                    });
            return proxyInstance;
        }
        return bean;
    }

测试有误 ,没有执行代理逻辑…

手把手教你用QEMU模拟AST2600-EVB开发板:OpenBMC环境搭建全流程 本文提供了一份详尽的实战指南,手把手教你使用QEMU模拟器搭建AST2600-EVB开发板的OpenBMC环境。内容涵盖从工具链准备、系统镜像获取(官方与自编译),到QEMU启动命令解析、网络配置(用户与桥接模式),以及通过SSH、WebUIRedfish API访问服务的全流程,帮助开发者在个人电脑上快速构建安全、可复现的嵌入式开发与测试沙盒。 阅读详情

相关推荐

车载以太网-组播

车载以太网-组播

天赐好车的博客 225

Spring IOC原理 Bean实例化、依赖注入循环依赖解决

IOC Inverse Object Control 对象控制反转。Spring框架的最大特性,分离对象的维护控制工作,帮助工程师专注业务逻辑实现。整个Spring体系甚至其它整合的框架都是基于IOC容器实现,因为都需要Spring管托Bean。 本章要叙述Bean加载过程,IOC的实现原理就是Bean的加载过程。会涉及到: 1.Bean的实例化 2.循环依赖的解决 3.依赖属性的注入 4.对Bean应用前置、后置处理器,Aware接口 5.衔接AOP的入口,对Bean应用动态代理......

AllenChan_的博客 983

PCL 模型滤波器【2025最新版】

根据给定的模型系数在点云中提取对应于模型的点云数据。博客长期更新,本文最新更新时间为:2025年6月17日。

点云侠的博客 4335

Spring - InstantiationAwareBeanPostProcessor 扩展接口

(1)实例化: 实例化的过程是一个创建Beang过程,即调用Bean构造函数,单例的Bean入单例池中。(2)初始化: 初始化的过程是一个赋值的过程,即调用Beansetter,设置Bean属性。接口在此基础上增加了3个方法,使得扩展接口可以扩大到实例化阶段属性注入阶段。接口只在bean的初始化阶段进行扩展(注入spring上下文前后),而。接口 , 从方法上我们也可以看出。作用于过程(1)实例化前后;用于过程(2)初始化前后。按调用顺序,我们来看一下。

小工匠 3万+

Spring Aware接口执行时机源码深度解读

Spring中有这样一种标记接口的存在Aware,只要是spring管理的bean实现Aware接口,那么spring就会在bean创建的某个时机将相应的资源注入到该spring bean中,比如ApplicationContextAware, 会将spring 应用上下文ApplicationContext自动注入到bean中。

zzy7075的专栏 363

spring 扩展点之后置处理器(PostProcessor)及Aware接口

在bean的实例化前后执行。每个接口有不同的接口方法。Bean定义注册后置处理器,这个也是在bean被初始化之前对bean定义进行修改,比BeanFactory后置处理其稍早一些,暴露的是BeanDefinitionRegistry注册对象。总的来说,Spring Aware 的作用是为 Bean 提供访问利用 Spring 容器资源的能力,通过回调方法将特定的对象或上下文注入到 Bean 中,使得 Bean 能够与 Spring 容器进行交互,获取更多的功能信息,从而更好地适应各种开发需求。

sinat_16493273的博客 529

springAware接口BeanPostProcessorBeanFactoryPostProcessor的区别

springAware接口BeanPostProcessorBeanFactoryPostProcessor的区别 看了关于Aware接口后置处理器接口BeanPostProcessorBeanFactoryPostProcessor),感觉他们之间的功能有点乱,说一下他们之间的区别: (1)从调用时间点上看,Aware接口的方法(都是setXXX方法)是在Bean的属性被设置之后,初始化方法初始化方法(InitializingBean接口的方法,或@PostContruct等)执行之前被调用(

qq_39483534的博客 2118

零基础入门Spring源码

本文主要介绍Spring的执行流程梳理,主线为Spring源码中bean创建到销毁的流程梳理其中关键的接口,如:BeanFactory、BeanDefinition、PostProcessor等。

weixin_46425661的博客 2062

手写简易Spring框架

b站图灵学院up周瑜手写简易Spring课程笔记视频配套代码。

hwp_ing的博客 1480

Spring 创建 Bean 的关键流程

本文从源码视角系统梳理了 Spring Bean 的生命周期过程,深入解析对象从实例化到初始化再到销毁的完整执行机制及其设计原理。

稳扎稳打,持续进步 2553

Spring入门——依赖注入实现方式、如何阻止依赖注入bean的初始化工作

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

2401_84048542的博客 757

手写模拟spring

spring容器启动时需要根据配置类提供的信息去扫描,因为扫描路径定义在了配置类,所以需要判断有没有配置类上有没有ComponentScan注解,如果有就先获取到这个注解对象,接着就需要根据注解对象去获取注解的属性值,也就是获得扫描路径。获取的扫描路径只是包名,另外,扫描的时候需要扫描的是编译好的.class文件。 如何获得准确的扫描文件路径呢?通过类加载器的getResource方法,获取相对路径对应的资源,就能获得存放.class文件的路径并获得文件夹,判断文件里的.class文件并筛选出来。

PnJgHT的博客 337

手把手教你手写Spring框架

手写spring准备工作: 新建一个maven工程: 架构 新建类: package com.spring; public class keweiqinApplicationContext { private Class configClass; public keweiqinApplicationContext(Class configClass) { this.configClass = configClass; } //解析配

weixin_49849351的博客 7107

模拟手写实现Spring

AppConfig上肯定需要注解用于定义扫描路径@Target(ElementType.TYPE)——接口、类、枚举、注解@Target(ElementType.FIELD)——字段、枚举的常量@Target(ElementType.METHOD)——方法@Target(ElementType.PARAMETER)——方法参数@Target(ElementType.CONSTRUCTOR) ——构造函数@Target(ElementType.LOCAL_VARIABLE)——局部变量。

u014474768的博客 812

Spring源码:Bean的实例化及初始化过程

1. 概述 在前面的文章中,我们把 refresh() 中 obtainFreshBeanFactory、invokeBeanFactoryPostProcessors、方法都梳理了一遍,其中还有一个 registerBeanPostProcessors,但个人觉得实际上 invokeBeanFactoryPostProcessors类似,所以没有单独写一篇文章去描述的,尽管它非常重要,但是你可以自己去分析一下或者看看这篇文章:registerBeanPostProcessors 详解。 refresh(

个人站点:javatv.net 4871

手写Spring(二)

手写Spring(二) 上一节 手写Spring(一)做了一些准备工作,并且写了Spring启动时候是如何扫描、加载类的,最后通过getBean()方法获取bean 依赖注入 bean的单例还是原型只是作用域区别,但是创建bean都是同样的步骤。在补充createBean()这个方法之前我们在service层新加一个OrderService @Component("orderService") public class OrderService { } 在原来的UserService新增一个属性 @Com

weixin_46053707的博客 221

Spring中还有哪些BeanPostProcessor

Spring框架中,是一个非常重要的扩展点,它允许开发者在Spring容器完成标准初始化过程前后添加自定义逻辑。通过实现接口,可以对Bean进行修改或增强,而无需改变Bean的实现。除了上述提到的用于支持Aware接口的外,Spring还内置了许多其他有用的实现。以下是一些常见的。

Java的专栏 424

Spring入门——依赖注入实现方式

这份文档从构建一个键值数据库的关键架构入手,不仅带你建立起全局观,还帮你迅速抓住核心主线。除此之外,还会具体讲解数据结构、线程模型、网络框架、持久化、主从同步切片集群等,帮你搞懂底层原理。相信这对于所有层次的Redis使用者都是一份非常完美的教程了。你的支持,我的动力;祝各位前程似锦,offer不断!!!《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!你的支持,我的动力;祝各位前程似锦,offer不断!!!

H1767410的博客 1012

Spring之Bean

Spring Bean 是由 Spring IoC 容器管理的对象。这些对象可以是普通的 Java 对象(POJO),也可以是各种服务、组件、数据访问对象等。Spring 通过配置文件(如 XML 配置文件)、注解或者 Java 代码的方式来定义管理这些 Bean。一、基本信息类名:指定 Bean 的全限定类名,Spring 根据这个类名来实例化 Bean。作用域:singleton(单例):在整个 Spring 容器中只有一个实例。

梦想是很难很难的,所以先勇敢一点 1098

一篇文章带你搞懂 Spring Bean 生命周期

这篇文章帮你理清一条完整链路:Bean 是如何被创建、增强,并最终交给你使用的

Tjy2186987211的博客 775

Spring Aware 接口详解:让 Bean 感知容器资源

Spring Aware 接口详解:让Bean感知容器资源 摘要:Spring Aware接口是一组标记接口,允许Bean在初始化阶段安全获取容器资源。通过回调机制,Bean可以感知Bean名称、BeanFactory、类加载器或ApplicationContext等核心容器组件。文章详细介绍了Aware接口的设计原理、触发时机及常用子接口,包括BeanNameAware、BeanFactoryAware、ApplicationContextAware等,并提供了代码示例展示如何综合使用多个Aware接口

刘一说的IT专栏 807

威纶通触摸屏中英文输入法源程序.7z

威纶通触摸屏中英文输入法源程序。包含工程文件、使用说明,常用中文字符GBcode /UNcode 编码;全套资源,拿去就用。

221.MATLAB编程 MIMO-OFDM(simulinkANDMATLAB).rar

221.MATLAB编程 MIMO-OFDM(simulinkANDMATLAB).rar

上一篇: 大数据学习相关内容总结
下一篇: 5.2 学习总结 config配置中心,Rabbitmq六种工作模式
愿逐月华!
博客等级 码龄7年 10粉丝 · 62原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值