3、Spring 注解驱动开发(Annotation-based Configuration)深度解析

JetBrains AI IDE AIR:面向AI协作的原生开发操作系统 AI IDE 不再是传统IDE的插件增强,而是以AI为第一公民重构的开发操作系统。其核心在于将自然语言任务自动拆解为多代理协同执行流,依托本地轻量模型(如CodeSight-7B)、动态代码图谱(CodeGraph)与权限可控的沙箱运行时,实现跨文件、跨模块、带验证闭环的工程级重构。相比Copilot等补全工具,AIR真正解决的是‘需求理解—任务编排—安全执行—结果验证’全链路断裂问题,尤其适合技术决策、遗留系统治理与工程能力培养等高价值场景。 阅读详情

以下是为你精心撰写的 《3.1 注解驱动开发(Annotation-based Configuration)深度解析》 完整说明文档,系统性地梳理 Spring 从 XML 到注解驱动的演进脉络,深入剖析每一个核心注解的设计意图、使用场景、底层原理与最佳实践。

本章是现代 Spring 开发的基石,也是你从“配置工程师”蜕变为“架构思维开发者”的关键一跃。


📜 3.1 注解驱动开发(Annotation-based Configuration)深度解析

目标:彻底掌握 Spring 注解体系,理解其如何取代 XML,实现“零配置、高内聚、可测试”的开发范式


✅ 一、从 XML 配置 → Java 配置 → 注解驱动:Spring 的“去配置化”革命

1.1 XML 配置时代(Spring 1.x–2.x)

<!-- beans.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="...">
    
    <bean id="userRepository" class="com.example.repo.UserRepositoryImpl"/>
    
    <bean id="userService" class="com.example.service.UserService">
        <property name="userRepository" ref="userRepository"/>
    </bean>

    <bean id="userController" class="com.example.web.UserController">
        <property name="userService" ref="userService"/>
    </bean>
</beans>
❌ XML 配置的痛点:
问题说明
配置与代码分离类在 Java 文件中,依赖在 XML 中,跳转成本高
易出错ID 写错、类名拼错、ref 引用错误 → 运行时才报错
维护困难大型项目 XML 文件可达数千行,难以阅读
无法复用无法使用 Java 的继承、泛型、条件逻辑
编译期无检查所有错误只能在运行时发现

💡 开发者心声:“我写了一个类,却要到另一个文件里告诉 Spring‘这个类要被管理’?太反直觉了。”

1.2 Java 配置时代(Spring 3.x):@Configuration + @Bean

@Configuration
public class AppConfig {

    @Bean
    public UserRepository userRepository() {
        return new UserRepositoryImpl();
    }

    @Bean
    public UserService userService() {
        return new UserService(userRepository()); // ✅ 直接调用方法,类型安全、IDE 友好
    }

    @Bean
    public UserController userController() {
        return new UserController(userService());
    }
}
✅ Java 配置的优势:
优势说明
类型安全编译期检查,方法调用错误直接报错
可复用支持 Java 的 if/for/条件判断、工厂模式
可测试可直接 new AppConfig() 并调用 userService() 测试
结构清晰所有 Bean 定义集中在一个类中,逻辑可见
⚠️ 仍存在的问题:
  • 你仍然需要手动声明每个 Bean → 代码量大
  • 无法自动发现第三方库中的组件(如 MyBatis Mapper)
  • 仍需“显式注册”,不够“智能”

💡 Spring 的进化方向:让开发者“什么都不用写”,框架自动发现并装配。

1.3 注解驱动时代(Spring 2.5+):“约定优于配置”

@Repository
public class UserRepositoryImpl implements UserRepository { ... }

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository; // 自动注入
}

@RestController
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public List<User> getAll() {
        return userService.findAll();
    }
}
@Configuration
@ComponentScan("com.example") // 自动扫描包下所有带注解的类
public class AppConfig { }

✅ 终极目标:
你只写业务代码(POJO + 注解),Spring 自动发现、自动装配、自动管理。


✅ 二、核心注解详解:从“声明”到“自治”

2.1 组件注解:@Component 及其派生

注解语义用途推荐场景
@Component通用组件任何 Spring 管理的 Bean,无特定语义自定义工具类、非标准组件
@Service服务层业务逻辑层,封装核心流程UserService, OrderService
@Repository数据访问层持久化操作,与数据库交互UserRepository, ProductDao
@ControllerWeb 控制层处理 HTTP 请求,返回视图MVC 中的 @RequestMapping 类
@RestControllerREST 控制层@Controller + @ResponseBody 合并REST API 返回 JSON/XML

✅ 为什么要有四个派生注解?

  • 语义清晰:一眼看出类的职责
  • AOP 切点可区分:如对所有 @Repository 添加异常转换
  • 工具支持:IDE 可识别并提供上下文提示(如 Spring Boot Starter 检测)
  • 框架扩展:如 Spring Data JPA 会自动扫描 @Repository 接口
📌 示例:异常转换(@Repository 的特殊价值)
@Repository
public class UserRepositoryImpl implements UserRepository {
    public User findById(Long id) {
        // 如果查不到,抛出 DataAccessException(Spring 统一异常)
        return jdbcTemplate.queryForObject(...);
    }
}

// Spring 会自动将 JDBC 异常 → DataAccessException → 转换为更友好的异常

✅ @Repository 不只是注解,它启用 Spring 的异常翻译机制(如将 SQLException → DataAccessException)。


2.2 依赖注入注解:@Autowired、@Qualifier、@Resource

2.2.1 @Autowired:按类型注入(Type-based)
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository; // ✅ 按类型匹配
}
  • 默认行为:按 类型 在容器中查找唯一匹配的 Bean
  • 若存在多个同类型 Bean → 抛出 NoUniqueBeanDefinitionException
  • 若无匹配 Bean → 抛出 NoSuchBeanDefinitionException
  • 可设为非必需:@Autowired(required = false)

✅ 推荐用法:结合构造器注入,避免 required=false

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository; // ✅ 必须注入,否则构造失败
    }
}
2.2.2 @Qualifier:按名称精确注入(Name-based)
@Repository("mysqlRepo")
public class MySQLRepository implements UserRepository { ... }

@Repository("redisRepo")
public class RedisRepository implements UserRepository { ... }

@Service
public class UserService {
    @Autowired
    @Qualifier("mysqlRepo") // 明确指定使用 mysqlRepo
    private UserRepository userRepository;
}

✅ 替代方案:使用 @Primary 标记默认实现

@Primary
@Repository
public class MySQLRepository implements UserRepository { ... }

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository; // ✅ 自动注入 MySQLRepository
}
2.2.3 @Resource:JSR-250 标准,按名称优先
@Service
public class UserService {
    @Resource(name = "userRepository") // JSR-250 标准
    private UserRepository userRepository;
}
特性@Autowired@Resource
来源Spring 自有Java 标准(JSR-250)
注入方式按类型(Type)按名称(Name)优先,名称不存在则按类型
是否支持 required=false✅ 是✅ 是
推荐度⭐⭐⭐⭐⭐⭐⭐⭐(仅在跨框架兼容时使用)

✅ 最佳实践:

  • 项目内统一使用 @Autowired + @Qualifier
  • 避免混合使用 @Resource,除非与 Java EE 其他组件(如 JNDI)集成

2.3 配置类注解:@Configuration 与 @Bean

2.3.1 @Configuration:声明一个 Java 配置类
@Configuration
public class AppConfig {
    // 此类中的 @Bean 方法会被 Spring 解析为 Bean 定义
}
  • @Configuration 本质是 @Component 的元注解,意味着它本身也是一个 Bean
  • Spring 会为其生成代理,用于处理 @Bean 方法之间的调用(解决循环依赖)
2.3.2 @Bean:声明一个由方法返回的 Bean
@Bean
@Scope("prototype")
@Lazy
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
    RedisTemplate<String, Object> template = new RedisTemplate<>();
    template.setConnectionFactory(factory);
    template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
    return template;
}
✅ @Bean 方法的高级特性:
特性说明
参数注入方法参数自动从容器中注入(如 RedisConnectionFactory)
支持作用域@Scope("prototype")、@Scope("request")
支持延迟加载@Lazy → 首次使用时才创建
支持初始化/销毁@Bean(initMethod = "init", destroyMethod = "close")
支持条件@ConditionalOnProperty、@ConditionalOnClass(Spring Boot)

✅ 典型用例:第三方库集成

@Bean
@ConditionalOnMissingBean // 如果用户没定义,我才创建
public ObjectMapper objectMapper() {
    return new ObjectMapper()
        .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
}

✅ 三、@ComponentScan:自动发现的魔法引擎

3.1 基本用法

@Configuration
@ComponentScan(basePackages = {"com.example.service", "com.example.repo"})
public class AppConfig { }

或简化写法:

@Configuration
@ComponentScan("com.example") // 扫描该包及所有子包
public class AppConfig { }

3.2 扫描机制详解

步骤说明
1. 启动容器AnnotationConfigApplicationContext 或 SpringApplication.run()
2. 解析 @ComponentScan获取要扫描的包路径
3. 遍历包下所有 .class 文件使用 ClassPathScanningCandidateComponentProvider
4. 读取类元数据使用 ASM 字节码解析技术,识别 @Component、@Service 等注解
5. 生成 BeanDefinition将类信息注册到 BeanDefinitionRegistry
6. 后续处理依赖注入、初始化、AOP 代理等

✅ 底层技术:Spring 使用 ASM(字节码操作框架)而非反射来解析注解,性能极高。

3.3 扫描过滤器:只扫描特定类

@Configuration
@ComponentScan(
    basePackages = "com.example",
    includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Service.class),
    excludeFilters = @ComponentScan.Filter(type = FilterType.REGEX, pattern = "com.example.*.test.*")
)
public class AppConfig { }
  • includeFilters:只扫描满足条件的类
  • excludeFilters:排除某些类(如测试类、工具类)

✅ 典型应用:Spring Boot 中 @SpringBootApplication 默认扫描主类所在包,且自动排除 @Test 类。


✅ 四、补充:其他关键注解与进阶技巧

4.1 @Primary:设置默认候选 Bean

@Service
@Primary
public class DefaultEmailService implements EmailService { ... }

@Service
public class MockEmailService implements EmailService { ... }

@Service
public class OrderService {
    @Autowired
    private EmailService emailService; // ✅ 自动注入 DefaultEmailService
}

✅ 适用场景:多实现类中,指定一个“默认实现”,其余用 @Qualifier 显式注入。

4.2 @Lazy:延迟初始化 Bean

@Service
@Lazy
public class HeavyService {
    public HeavyService() {
        System.out.println("💥 仅在第一次使用时才初始化");
    }
}
  • 作用:启动时不创建,第一次 getBean() 时才创建
  • 适用:启动慢、资源消耗大、非核心服务(如定时任务、缓存连接)

4.3 @Profile:环境感知配置

@Component
@Profile("dev")
public class DevDataSourceConfig { ... }

@Component
@Profile("prod")
public class ProdDataSourceConfig { ... }
@Configuration
@Profile("test")
public class TestConfig {
    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder().build(); // 内存数据库
    }
}
  • 启动时指定:-Dspring.profiles.active=prod
  • 支持组合:@Profile({"prod", "cloud"})

✅ 企业级实践:
application-dev.yml、application-prod.yml + @Profile 实现环境隔离配置

4.4 @Import:导入其他配置类

@Configuration
@Import({DatabaseConfig.class, CacheConfig.class, SecurityConfig.class})
public class AppConfig { }

✅ 替代 @ComponentScan:当你知道确切的配置类,不希望扫描整个包时

4.5 @Enable* 系列注解:开启功能模块

注解功能
@EnableWebMvc启用 Spring MVC(不推荐,Spring Boot 自动配置更好)
@EnableTransactionManagement启用声明式事务
@EnableScheduling启用定时任务
@EnableAsync启用异步方法(@Async)
@EnableCaching启用缓存(@Cacheable)

✅ Spring Boot 时代:这些注解大多被 @SpringBootApplication 自动包含,无需手动写


✅ 五、从 XML 到注解驱动的演进全景图

阶段配置方式代表技术优点缺点
1. XML 配置外部文件<bean>、<property>灵活、分离无类型安全、难维护、运行时错误
2. Java 配置Java 类@Configuration、@Bean类型安全、可编程、可测试需手动注册每个 Bean,繁琐
3. 注解驱动类内注解@Component、@Autowired、@ComponentScan零配置、自动发现、极简需理解 Spring 的“约定”机制

✅ 演进本质:
从“外部配置” → “代码内声明” → “框架自动推断”

🎯 最终形态:Spring Boot 的“约定优于配置”

@SpringBootApplication // = @Configuration + @ComponentScan + @EnableAutoConfiguration
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}
@Repository
public class UserRepository { ... } // ✅ 自动被扫描、自动注入、自动管理

@Service
public class UserService {
    @Autowired private UserRepository repo; // ✅ 自动装配
}

@RestController
public class UserController {
    @Autowired private UserService service; // ✅ 自动装配
}

✅ 你不再写一行配置,Spring Boot 自动完成所有装配。


✅ 六、最佳实践与避坑指南

主题建议
注入方式✅ 优先构造器注入 + @Autowired,避免字段注入
注解命名✅ 使用 @Service、@Repository、@Controller,语义清晰
@Qualifier vs @Primary✅ 多实现类时,用 @Primary 定义默认,@Qualifier 用于特殊场景
扫描范围✅ @ComponentScan 尽量限定在业务包,避免扫描 java.util.* 等
@Resource✅ 除非与 Java EE 集成,否则避免使用,统一用 @Autowired
@Lazy✅ 用于启动慢、非核心服务,提升启动速度
@Profile✅ 每个环境独立配置文件(application-{profile}.yml),避免 @Profile 混乱
@Import✅ 用于模块化配置,如 @Import(DataSourceConfig.class)
避免循环依赖✅ 构造器注入循环依赖会报错 → 设计上应避免,可用 @Lazy 或 ObjectFactory 解决

🚫 避坑:不要在 @ComponentScan 中扫描 java.* 或 org.springframework.*

@ComponentScan(basePackages = "java.lang") // ❌ 绝对禁止!

⚠️ 会导致容器启动失败或性能灾难 —— Spring 会尝试扫描所有 Java 核心类!


✅ 七、源码级洞察:注解是如何被“识别”的?

7.1 关键类:ClassPathBeanDefinitionScanner

ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(registry);
scanner.addIncludeFilter(new AnnotationTypeFilter(Component.class));
scanner.scan("com.example"); // 扫描包
  • 使用 ASM 解析 .class 文件,不加载类,只读注解元数据
  • 识别 @Component 及其派生注解(@Service 等都标记了 @Component)
  • 生成 AnnotatedBeanDefinition,注册到 BeanDefinitionRegistry

7.2 @Autowired 如何工作?

  • AutowiredAnnotationBeanPostProcessor 是处理 @Autowired 的后处理器
  • 在 populateBean() 阶段,扫描字段/方法/构造器上的 @Autowired
  • 使用 AutowireCandidateResolver 查找匹配的 Bean
  • 通过反射调用 setter / 构造器完成注入

✅ 注意:@Autowired 是运行时处理,不是编译时。
所以即使你写错了 @Autowired,编译也能通过 —— 这是注解驱动的代价。


✅ 八、总结:注解驱动的本质 —— “声明式编程”的胜利

传统方式注解驱动方式
“告诉容器:我需要一个 UserService,它依赖 UserRepository”“我是一个 UserService,我需要一个 UserRepository”
配置在 XML 中,代码在 Java 中配置和代码在同一个地方
你管理依赖Spring 管理依赖
你是“装配工”你是“设计师”

✅ 注解驱动的终极哲学:
“你只需声明‘你是谁’和‘你需要什么’,剩下的交给 Spring。”

这正是现代框架的精髓:让开发者回归业务,而不是配置。


消息队列之KAFKA kafka 阅读详情

相关推荐

Vue3结合vue-office实现Word文档上传与预览全流程解析

本文详细解析了如何在Vue3项目中集成vue-office插件实现Word文档上传与预览功能。从项目初始化、插件安装到文件上传处理(包括ArrayBuffer转换)、预览优化及常见问题解决方案,提供了一套完整的实现流程,帮助开发者快速实现高效的文档预览功能。

weixin_29001327的博客 464

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

matianl:SAP 最详细的权限管理解析

上文所说的系统自带权限对象与权限字段仅能满足有限的需要,其权限审核的逻辑也是系统硬编码了的,我们能做的只是是否启用某项权限对象的检查(使用SU22)。如果需要自定义,通过SU20、SU21定义即可。

matinal 當冬夜漸暖 。公众号:matinal 2153

SpringBoot音乐推荐系统实战:从环境搭建到算法集成与调试

推荐系统作为信息过滤的核心技术,其基本原理是通过分析用户历史行为与物品特征,预测用户偏好并实现个性化内容分发。在工程实践中,SpringBoot凭借其快速启动、生态完整和易于部署的特性,成为构建此类系统的热门后端框架。结合协同过滤、基于内容推荐等算法,开发者能够高效实现个性化推荐功能,广泛应用于音乐、电商、资讯等场景。本文聚焦于SpringBoot音乐推荐系统的实战开发,详细解析了在IDEA、Eclipse等主流IDE中进行环境配置、数据库设计、核心算法集成以及前后端联调的关键步骤与常见问题排查,为毕业设计

weixin_30267785的博客 315

uniapp 开发微信小程序请求问题 , 真机调试正常,开发工具正常,但是使用扫码预览接口都是不通的,发布到体验版也是请求失败

uniapp开发小程序体验版接口请求失败(真机可以)

weixin_60408555的博客 3953

ESP32学习笔记06-UART 的485 通讯模式

通信方式选择UART 控制器支持多种通信模式,使用函数 uart_set_mode() 可以选择模式。选择特定模式后,UART 驱动程序将处理已连接 UART 设备的相应行为。例如,主机开始向 Tx FIFO 缓冲区写入数据时,UART 驱动程序会自动置位 RTS 管脚(逻辑 1);最后一位数据传输完成后,驱动程序就会取消置位 RTS 管脚(逻辑 0)。要使用此模式,软件。

Car12 2476

147.【2024Java八股-全网最全-10w字】

eg: 学校、院校、经验、年龄、跳槽频率…基本包括16种常见使用场景: 、数据共享分布式、、全局 ID、计数器、限流、位统计、购物车、用户消息时间线 timeline、、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜.详细讲解16种使用场景: https://blog.youkuaiyun.com/zxl646801924/article/details/123202381用户使用id进行查询文章的时候,首先会查询redis数据库,如果在redis中命中数据,那么redis就向用户返回查询的结果

qq_69683957的博客 1736

YOLOv11涨点改进| TGRS 2026 顶刊| 注意力改进篇| 引入MSEA多尺度边缘感知注意力,助力红外小目标检测、遥感目标检测、工业缺陷检测、图像去雨雾任务高效涨点

🔥本文提出了一种基于MSEA多尺度边缘感知注意力的YOLOv11改进模型,通过增强网络对边缘、纹理和细粒度信息的感知能力,显著提升复杂背景下的目标检测性能。MSEA模块采用多尺度空洞卷积提取上下文特征,并通过边缘监督和注意力融合机制强化目标边界信息。实验表明该方法在小目标、边界模糊目标和复杂纹理目标检测任务中表现优异,尤其在遥感、工业缺陷和红外检测等场景具有显著优势。文章详细介绍了MSEA的结构原理、核心代码实现、模块配置方法以及三种YOLOv11改进方案.

Ai缝合怪、助力小伙伴高效发论文 180

01:SpringAI

ai

weixin_43761434的博客 420

大模型部署指南:SGLang 框架

本文介绍使用 SGLang 框架部署大模型

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 1610

【异常】OpenClaw提示Message ordering conflict - please try again. If this persists, use /new to start a fr

摘要:OpenClaw助手出现"Message ordering conflict"异常时,表明会话消息排序冲突,主要由消息队列时序错乱、会话同步异常或上下文过载引起。解决方案包括:1)基础重试暂停后单发指令;2)最优方案是发送/new重置会话;3)极端情况下需重启客户端或检查指令格式。预防建议包括避免高频并发指令、定期重置会话及确保网络稳定。该报错属业务层异常,不影响账号安全。

奶爸的编程之路,也就一周冷个三天 422

基于SpringBoot+Thymeleaf的校园课程推荐系统实战

推荐系统是解决信息过载的核心技术之一,其原理是通过分析用户行为与物品特征,计算相似度并生成个性化推荐。本教程从最基础的推荐概念出发,深入讲解基于内容的推荐策略与Jaccard相似度计算,结合Java生态中主流的服务端渲染方案——SpringBoot与Thymeleaf,手把手搭建一套完整的校园课程推荐系统。系统的后端采用分层架构,前端通过模板引擎直接渲染页面,无需额外构建Vue工程,极大降低了毕设开发门槛。文中完整覆盖登录注册、课程管理、选课记录、AI课程推荐及管理员后台等核心功能,并针对版本兼容、时区配置

365

YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度!

YOLO系列算法改进 | 主干改进篇 | 替换LSKNet主干特征提取网络 | 通过动态调整感受野自适应融合长程上下文,显著提升小目标与复杂背景下的检测精度! (以YOLO26最新目标检测模型为基础,利用LSKNet替代Backbone)

2502_91881744的博客 211

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 215

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【项目推荐】基于 SpringBoot3 + Spring AI 的游泳馆管理系统:Agent + RAG + Function Calling 一次学全

它不是玩具 Demo,而是一个「业务 + AI」双主线交织的真实系统——预约业务在跑,AI 客服在旁边实时查库作答,两条线通过 Function Calling、RAG、站内消息串成一体。面试官问「你做过什么 AI 项目」时,你能从业务场景讲到架构取舍,从 RAG 切分参数讲到降级兜底——这和「我调了一下 ChatGPT 的 API」是完全不同的两个段位。项目已包含完整的建表 SQL、初始化数据、部署文档,克隆下来就能跑。获取方式:见文末说明 / 后台回复关键词获取。—— 完 ——

深耕开发,专注编程实战。分享源码解析、项目搭建、问题排查笔记,沉淀技术,持续更新。 337

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 325

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在

# SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在 > 这是一套基于 Spring Boot 的服装销售平台源码,配套 `db.sql` 建表脚本,业务覆盖商品展示、购物车、订单流转、收货地址、订单评价、商品评论、在线客服、轮播图和资讯。形态是**前后台双端**:前台是顾客逛的商城,后台是管理员管的控制台。本文带你看清里面有什么、怎么跑

面朝大海 213

基于 Springboot3+SpringAI+Agent+RAG+Function Calling的校园闲置物品循环流转 AI 智能估价平台

基于SpringBoot3+SpringAI1.0,打造校园闲置循环平台,实现从发布、智能估价(规则+大模型校准)、担保交易到信用治理与运营看板的闭环。通过RAG问答、FunctionCalling工具调用、流式SSE输出及本地降级策略,将AI能力深度嵌入业务链路。项目强调可落地性:无APIKey也能演示,向量存MySQL,状态机防绕过,代码清晰可读。适合想做真实AI全栈项目、准备面试或提升工程化思维的开发者。

深耕开发,专注编程实战。分享源码解析、项目搭建、问题排查笔记,沉淀技术,持续更新。 284

Agent 点了“允许”之后:用 Spring AI 2.1 验证工具确认的边界

基于 Spring AI 2.1.0-RC1 预览版的本地计数器实验,验证同一回复整批暂停、恢复时逐项决策,以及相同确认重放仍会再次执行工具。结合源码解释审批身份、原始参数和业务幂等的分工,给出完整复现代码;不连接模型或真实业务。

冷脸萌萌的技术实践 70

Spring AI 多模态实战(下):文生图 + TTS 语音合成(含 2.0 流式音频分片)

本文基于 Spring AI 2.0.1,实战文生图与TTS语音合成:通过ImageModel/ImagePrompt生成图片(返回URL或base64),用SpeechModel/SpeechPrompt实现文字转语音;重点介绍2.0流式音频分片技术,支持低延迟长文本播报;结合缓存、落盘、限流等策略控制生成成本,避免URL过期、音频格式错乱等常见坑点。附完整代码与踩坑指南,助力构建高效多模态应用。

weixin_43128865的博客 264

Spring AI 提示词实战指南:四大角色、格式化与避坑

3. → ToolResponseMessage([ToolResponse(id:"call_1", name:"queryDtc", responseData:"...")]) ← 你的程序执行后回填。2. → AssistantMessage(toolCalls=[{id:"call_1", name:"queryDtc", args:{code:"P0301"}}]) ← 模型说"我要查"@JsonPropertyDescription("最可能的原因,一句话") String cause,

qq654207743的博客 693

基于SpringBoot的营养食谱管理系统设计与实现-附源码

基于SpringBoot的营养食谱管理系统,实现食谱、食材与营养数据的数字化管理,支持多条件筛选、个性化饮食方案定制及收藏功能,助力用户科学饮食,提升营养师管理效率。系统采用前后端分离架构,技术栈成熟,功能完整,测试验证通过,具备良好可扩展性,未来可集成体质测评、饮食打卡等智能功能。

专注于大学生项目实战开发,讲解,毕业答疑辅导,java就业辅导,高校老师/讲师/同行合作。以及产品测评宣传、工具推广等合作。全网粉丝10w+,平台优质java、小程序创作者。 303

Spring AI 全模块 API 字典一览(1.1.0 版)

本文为 Spring AI 1.1.0 全量字典,涵盖模型接入(ChatModel)、Prompt与Message架构、ChatOptions配置及实战用例。重点解析 call()/stream() 方法签名、Prompt 消息封装机制、ChatResponse 响应结构,以及工具调用(ToolCall/ToolResponse)的配对逻辑。附真实项目用例(如 WebSearchReactAgent、PlanExecuteAgent),强调多轮对话记忆机制、流式处理防空策略与参数配置顺序陷阱,适配 Open

Java 后端学习者。写 JUC 并发、Redis 实战,也记录 LLM 应用开发(Spring AI / RAG / Agent)的学习实录——少讲概念,多讲过程和踩坑。 576

SpringCloud:OpenFeign快速实现

在SpringCloud微服务架构中,OpenFeign实现服务间高效、动态远程调用。通过集成Nacos配置中心与负载均衡,调用方无需硬编码服务地址,可自动从注册中心获取服务信息,实现动态发现与调用。只需在调用方添加@EnableFeignClients注解及@FeignClient接口声明,即可替代传统RestTemplate,降低耦合性,提升系统可维护性与稳定性。

2501_93392325的博客 160

Spring系列03:Bean 的三种注册方式

写 Spring 的人,几乎天天在「把一个对象交给容器」。@Service标一下、配置类里@Bean写一个、或者丢一堆方法——但它们本质不是一回事。很多开发者能把三种写法都写出来,一被问「@Bean放在@Component和里到底差在哪」「为什么有的@Bean互相调用拿的是同一个实例、有的却 new 了好几个」,就卡壳了。这一篇把三种注册方式的身世、边界,以及那个最容易被忽略的 full/lite 玄机一次讲透。方式一:组件扫描( Stereotype +——类上贴注解,容器扫包自动认。@Bean方法。

liangbo7的博客 203

(开源)宠物共享平台实战指南 基于 Java + SpringBoot + Web + MySQL

这是一个基于 Java + SpringBoot + Vue + MySQL 构建的完整宠物共享平台(管理端为 Vue,用户端为纯静态 Web 站,由后端直接托管),功能持续优化中...用户登录 / 注册 宠物寄养管理 / 寄养审核 寻宠启事管理 / 认领审核 宠物视频管理 / 视频收藏 / 视频留言 感谢信管理 公告管理 轮播图信息管理 基础数据管理 用户管理 / 管理员管理 个人中心 其它...

小小码农身兼魔法师职位!除你武器~ 384
上一篇: 2、Spring 核心容器:IoC 与 DI 的实现原理
下一篇: Spring Framework 模块体系全景解析
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值