[Spring]Annotation-based container configuration_AnotationBasis_01

Ingress-nginx | 为ingress规则添加configuration-snippet注解时异常解决实践 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 阅读详情

基于注解的容器配置

首先使用注解和xml配置,本质上没有好坏之分,只有适合不适合之分。如果你觉得哪个顺手就用哪个,或者都用。


首先要使用anotation-config 需要在xml中配置

<context:annotation-config/>:该句自动的注册AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, PersistenceAnnotationBeanPostProcessor, RequiredAnnotationBeanPostProcessor处理器。

当然如果直接配置了

<context:component-scan base-package="com.javaconfig.domain"/> 那么也就是默认配置了<context:annotation-config/>,所以只需要定义这个,没必要定义上面的那个。


@Required

注解适用于bean属性的setter方法并且它指示,受影响的bean属性必须在配置时被填充在XML配置文件中,否则容器将抛出BeanInitializationException

如下例子:

被注入类定义

public class Instrument {
	public void play() {
		System.out.println("play instrument.");
	}
}

注入类

public class Player {
	
	private Instrument instrument;

	public void play() {
		instrument.play();
	}


	public Instrument getInstrument() {
		return instrument;
	}
	@Required
	public void setInstrument(Instrument instrument) {
		this.instrument = instrument;
	}

}


xml 配置

<bean id="instrument" class="com.domain.Instrument"/>
	<bean id="player" class="com.domain.Player" >
		<!-- <property name="instrument" ref="instrument"></property> -->
	</bean>

注意player里面的property是被注释掉的,如果所以这个时候会报错,取消注释恢复正常



@Autowired

默认按类型注入,如果存在0个或者多个待选类型,则会报错。能够被应用于fields,constructor,setter method.

对于被@Autowired标注的对象甚至可以是private类型。

@Component
public class Football {
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "football";
	}
}


public class FootballPlayer {
	@Autowired
	private Football football;
	public void play(){
		System.out.println("footballPlayer is playing " + football);
	}
}


可以直接注入到私有的football field里,甚至不需要setter method。

可以同时注入多个依赖

public class MovieRecommender {
private MovieCatalog movieCatalog;
private CustomerPreferenceDao customerPreferenceDao;
@Autowired
public void prepare(MovieCatalog movieCatalog, CustomerPreferenceDao customerPreferenceDao) {
this.movieCatalog = movieCatalog;
this.customerPreferenceDao = customerPreferenceDao; }
// ...
}


可以为某些集合数组类型提供依赖注入,将所有可能待选bean注入其中,比如

public class MovieRecommender { @Autowired
private MovieCatalog[] movieCatalogs;
// ...
}

这将把容器内注册的所有MovieCatalog注入其中,如果注入的类型是map,则会自动按照 name:object 注入 name即是bean的名字

@Autowired可选属性有required,每个类只能有一个required = true ,可以存在多个required = false 当遇到多个可以选择方案时候,spring 容器采用贪心策略注入。



@Primary

因为@Autowired 会导致个可能注入bean发生,这个时候可以用@Primary来申明 某个待注入bean 为最优方法

@Configuration
public class MovieConfiguration {
@Bean
@Primary
public MovieCatalog firstMovieCatalog() { ... } @Bean
public MovieCatalog secondMovieCatalog() { ... }
// ...
}

这个时候如果某个类需要注入MovieCatalog 需要注入bean的时候 会首先选择@Primary标注的

public class MovieRecommender { @Autowired
private MovieCatalog movieCatalog;
// ...
}

这个时候注入的就是firstMovieCatalog



@Qulifier

当你需要指定特定的某一个bean,成为待注入对象的时候 你可以使用@Qualifier来标注

public class MovieRecommender {
@Autowired
    @Qualifier("main")
private MovieCatalog movieCatalog;
// ...
}

public class MovieRecommender {
private MovieCatalog movieCatalog;
private CustomerPreferenceDao customerPreferenceDao;
@Autowired
public void prepare(@Qualifier("main")MovieCatalog movieCatalog, CustomerPreferenceDao customerPreferenceDao) {
this.movieCatalog = movieCatalog;
this.customerPreferenceDao = customerPreferenceDao; }
// ...
}

这个时候autowired 会注入main所限定名称的bean

你可以按照自己的需要定制属于自己的@Qulifier

比如

@Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface Genre {
    String value();
}

public class MovieRecommender {
@Autowired
    @Genre("Action")
private MovieCatalog actionCatalog; private MovieCatalog comedyCatalog;
@Autowired
public void setComedyCatalog(@Genre("Comedy") MovieCatalog comedyCatalog) { this.comedyCatalog = comedyCatalog;
}
// ...
}

效果等同于@Qulifier

一般情况下你并不需要指定那么详细,你只需要指定Anotaion的名字即可

@Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface Offline {
}

这个时候可以通过@Offline注入对应的bean

public class MovieRecommender {
@Autowired
@Offline
private MovieCatalog offlineCatalog;
// ...
}

甚至可以使用枚举来作为参数限定

@Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface MovieQualifier {
    String genre();
    Format format();
}


 public enum Format { VHS, DVD, BLURAY
}

public class MovieRecommender {
}
@Autowired
@MovieQualifier(format=Format.VHS, genre="Action") private MovieCatalog actionVhsCatalog;
@Autowired
@MovieQualifier(format=Format.VHS, genre="Comedy") private MovieCatalog comedyVhsCatalog;
@Autowired
@MovieQualifier(format=Format.DVD, genre="Action") private MovieCatalog actionDvdCatalog;
@Autowired
@MovieQualifier(format=Format.BLURAY, genre="Comedy") private MovieCatalog comedyBluRayCatalog;
// ...}






推荐11个顶级的Claude Code Skills ClaudeCode的Skills系统为程序员提供了11个强大的AI辅助工具,包括代码审查、重构建议、单元测试生成、API文档自动生成、性能分析、安全扫描、数据库迁移脚本生成、CI/CD配置、依赖管理、ER图生成和日志分析等功能。这些"技能包"可大幅提升开发效率,从代码质量到协作沟通全方位优化工作流程。用户可根据需求选择2-3个核心功能开始尝试,熟练后还可自定义Skills。该系统需要配合Anthropic的API使用,建议先在小型项目测试再应用于核心业务。 阅读详情

相关推荐

【亲测可用!】阿里达摩院开源实时数字人对话VideoChat本地部署教程(8G显存可跑)

本文主要记录在部署阿里达摩院开源实时数字人对话VideoChat时遇到的问题,希望对各位技术开发或爱好者有所帮助!

波点兔的博客 3890

Kubernetes Ingress-NGINX 4.12版本中StreamSnippet注解的安全风险解析与解决方案

在Kubernetes生态中,Ingress-NGINX作为最流行的入口控制器之一,其4.12版本引入了一项重要的安全变更。该变更对StreamSnippet注解的使用实施了更严格的风险控制机制,导致部分用户在升级后遇到"annotation group StreamSnippet contains risky annotation"的验证错误。 ## 问题本质 StreamSnippet是In...

gitblog_00273的博客 371

逆向工程的艺术:如何绕过PDD的长连接机制实现高效抓包

本文深入解析了如何通过逆向工程技术绕过拼多多(PDD)的长连接机制实现高效抓包。详细介绍了动态调试方案、关键函数Hook技巧及流量解密重组方法,帮助开发者在非Root环境下捕获并解析PDD的加密数据。结合Python工具链,实现稳定数据采集,适用于电商数据分析和反爬策略研究。

weixin_29058331的博客 674

Spring Core 之 Annotation-based Container Configuration(基于注解的容器配置)

文章目录一、Are annotations better than XML for configuring Spring? 一、Are annotations better than XML for configuring Spring? The introduction of annotation-based configuration raised the question of whether this approach is “better” than XML. The short answer i

qq_38515961的博客 635

深度解析 Android 开发工程师岗位:技术栈、职责与面试全攻略

本文深度剖析Android开发工程师职位要求,从核心技术栈到面试准备进行全面解读。关键点包括:1)掌握Kotlin语言特性和Jetpack组件;2)具备UI开发、性能优化和逆向分析能力;3)理解MVVM架构和Room数据库;4)熟悉常用工具链和开发流程。文章提供了详细的面试题库及解析,涵盖基础概念、UI优化、架构设计等方向,并给出职业发展建议:夯实基础、拓展技术广度、培养工程素养。旨在帮助开发者系统性地准备Android岗位求职,把握移动开发领域的技术趋势。

郑伟强dev的专栏 172

DirectX function “GetDeviceRemovedReason“ failed with DXGI_ERROR_DEVICE_HUNG (“The GPU will not resp

游戏报错"DXGI_ERROR_DEVICE_HUNG"的解决方案 在使用RTX 40系显卡运行FIFA 23等游戏时,可能出现DirectX报错导致游戏崩溃。这主要由于最新显卡驱动与DirectX 12的兼容性问题。解决方法包括: 降级显卡驱动版本 修改游戏配置文件,将DIRECTX_SELECT设为1 在显卡控制面板中关闭垂直同步、抗锯齿、DLSS 3等功能 调整电源模式为性能优先 这些操作可以有效解决因驱动兼容性导致的游戏崩溃问题。

猿小白的博客 3888

HTML注释、CSS注释、JS注释的区别

HTML注释、CSS注释、JS注释的区别 html: <!-- 注释内容 --> css : /* 注释内容 */ js : 单行 // 多行 /* 注释内容 */ 详情代码

nagenage123的博客 564

Cadence PSpice 仿真11:电感型低通滤波器最坏情况分析仿真实战图文教程

在进行蒙特卡罗分析时会将元器件的容差考虑进去,然后通过运行多次的随机仿真,得到电路输出的一个范围。但是多数情况下设计师关注的只是电路的最坏情况是否满足设计要求。PSpice的最坏情况分析是取在容差的边界点元件参数进行仿真以计算出电路输出的最坏情况。所以如果如果电路中有10个元件的话,需要先取10个元件的标准值仿真1次,然后再分别在10个元件的容差边界处各仿真1次,然后再对仿真结果进行统计和计算,再最坏情况下再仿真1次。

fydar的博客 1944

1.9. Annotation-based Container Configuration

上一节 1.8. Container Extension Points 目录 下一节 1.10. Classpath Scanning and Managed 文章目录1.9. Annotation-based Container ConfigurationAre annotations better than XML for configuring Spring?1.9.1. @Required1.9.2. Using @Autowired1.9.3. Fine-tuning Annotation-ba

u010593516的专栏 588

第一节:从Chat_Bot 到 AI_Agent——一个范式转换

本文系统剖析了工业级AI代理系统ClaudeCode的设计原理与工程实践。通过对比ChatBot与Agent的三个本质差异:自主循环决策vs单轮应答、环境交互vs纯文本I/O、持久状态管理vs无状态对话,揭示了构建生产级Agent系统的关键挑战。文章详细解析了ClaudeCode的五层架构设计、1800+文件组成的运行时系统,包括工具调度、权限管理、状态持久化等核心机制,并阐述了从简单API调用到完整Agent系统的演进路径。

2201_75869398的博客 67

2026华为OD面试题029:勇攀数字高峰

在给定的数字地形图里寻找登山路径,数字代表当前位置的海拔高度。要求从最低海拔出发,不断攀登,最终到达最高山峰。地图保证最低海拔和最高山峰都只有一个。 登山规则: - 路径上的海拔必须严格递增 - 只能向上下左右 4 个方向移动 - 路径必须从最低海拔开始,到最高海拔结束 - 每个地点只能走一次 - 每一步的攀登高度差必须大于 0,且不超过指定值 `K` 输出满足条件的登山路径的数量。

琅嬛福地 115

Spring系列9:基于注解的Spring容器配置

写在前面 前面几篇中我们说过,Spring容器支持3种方式进行bean定义信息的配置,现在具体说明下: XML:bean的定义和依赖都在xml文件中配置,比较繁杂。 Annotation-based :通过直接的方式注入依赖,xml文件配置扫描包路径,xml简化很多。 Java-based: 通过配置类和注解批量扫描和注册bean,不再需要xml文件。 前面的案例都是基于XML的,这篇介绍Annotation-based方式。 本文内容 通过简单案例入门基于注解方式的容器配置使用 Autowired的

kongxubihai的博客 1428

《从零学会 CST 仿真全流程》专栏简介

本专栏系统讲解CSTPCBStudio与MWSStudio在高速PCB仿真中的应用,涵盖SI/PI仿真全流程。重点介绍CSTPCBStudio用于板级信号完整性分析,CSTMWS用于3D高频电磁仿真,以及电缆、低频、多物理场等配套工具。课程以实战为导向,通过USB3.1、LPDDR4等案例,手把手教学软件操作与工程应用,适合硬件工程师、EMC工程师及电子专业学生学习。内容注重实操,弱化理论,帮助快速掌握仿真核心技能。

一只豌豆象的博客 666

Spring-Annotation-based-Container-Configuration

title: Spring-Annotation-based-Container-Configuration date: 2019-01-23 13:58:34 tags: Spring categories: Spring 注解形式与XML形式注入Bean哪个更好 答案是: 取决于具体情况 注解形式: 更加方便,短的申明,但是需要侵入代码 XML形式: 不用触碰源代码,不用重新编译他们 Sp...

Yoke 337

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring Annotation-based container configuration

Spring 零配置时如果一个类实现了BeanPostProcessor,这时我们在用@Bean定义一个Bean时需要用static修饰,具体解释请参考 http://stackoverflow.com/questions/18512446/configuring-class-inside-beanpostprocessor-with-derived-a-abstractsinglebeand...

iteye_1566的博客 229

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

No META-INF/validation.xml found. Using annotation based configuration only

gt;([Ljava/lang/Object;)V at org.springframework.cloud.bootstrap.BootstrapApplicationListener.bootstrapServiceContext(BootstrapApplicationListener.java:157) at org.springframework.cloud.bootstrap.BootstrapApplicationListener.onApplicationEvent(Bootstra

weixin_43880379的博客 4676

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

[Spring]Annotation-based container configuration_AnotationBasis_02

@Component @Repository @Service @Controller 本质上以上四类没有区别,但是在你定义应用分层的时候 aop的时候 这些不同语义的注解 就有不同意义,未来Spring是否会给予这些语义注解特殊的意义还并不清楚 在配置java类里面注解@ComponentScan(basePackages = "com.domain")的情况下,会自动扫描com.d

HeapStackk的博客 612

Spring学习笔记5_基于注解的容器配置(Annotation-based Container Configuration)

文章参考来源:Spring Framework官方文档 注解注入在XML注入之前执行。因此,XML配置覆盖了通过两种方法连接的属性的注释。 对于注解 <context:annotation-config/ > 相当于注册了以下几个后处理器post-processors: ConfigurationClassPostProcessor AutowiredAnnotationBeanPostProcessor CommonAnnotationBeanPostProcessor Persis.

hahalan的博客 418

Annotation based configuration in Spring

It is now possible to configure Spring's dependency injection with annotations. This means that annotations can be used in Spring to mark fields, methods and classes that need dependency injection. Sp

NeoStudio 567

spring in action_4 资源整理

jar files来自于maven repository http://mvnrepository.com/ 除了28个列于gradle.properties,另外三个是在测试中缺失的,所有jar文件打包为zip文件供方便下载。 下载链接: http://download.youkuaiyun.com/download/java_augur/10106263 欢迎就本书提出问题,一起学习,一起探讨。

java_augur的专栏 2289

基于注解(Annotation-based)的配置 及 几种注解标签的使用

&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" //没有任何前缀(比如xsi,context)的这种标签,他的schemaLocation 是                http://www.springframework.o...

Doraemon 457

Spring核心技术--IoC container用法详解

一直在使用Spring提供的IoC容器, 但是始终没有系统化的梳理一下. 今天在这里写下, 也是以备以后参考之用.Ioc container的核心是BeanFactory接口, 它提供的方法能够管理任何类型的对象. ApplicationContext是它的子接口, 集成了Spring AOP的特性.BeanFactory or ApplicationContext? BeanFactory目前

congyh的专栏 4495

spring的注入你真搞懂了吗?你不会一直都是这样错误的理解吧?

说起spring的注入,可能大家都有了解。可你认知几种注入方式呢?你所认知的注入方式是否正确呢?我估计大多数人了解注入方式不全面,并且还会曲解一些概念。今天我们就参考最权威的官网来具体谈谈spring的注入方式。

爱学习的狗蛋儿 1503

Spring使用注解自动装配、@Autowired和@Resource比对

Annotation-based Container Configuration 使用annotation配置更加简洁,Spring都支持这两种配置风格 spring2.0引用了@Required spring2.5采用通用的方法来驱动spring依赖注入@Autowired 2.5还添加了JSR-250注释的支持,@PostConstruct和@PreDestroy (初始化方法)(销毁方法) 需要注册单独的Bean定义,和context命名空间 <?xml version="1.0" encodi

haoyun的博客 328

spring Annotation based configuration

spring 注解相关 https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch04s11.html 转载于:https://www.cnblogs.com/liuhouhou/p/8977042.html

weixin_30737363的博客 150

SpringBoot 2.0.0 注入SpingCloud 有bug(目前只有SpringBoot 1.5+ 版本的支持)

今天弄了一整天,想将SpringBoot 2.0.0 注入SpingCloud 2.0.0版本有个bug,一天都没有弄好,晚上换了个1.5+的版本,同样的操作1.5+版本支持,2.0.0版本暂时不支持。 请升级一定要慎重啊,还是不太稳定有bug。 1、首先说正确的操作,在pom中新增依赖 版本要支持 &lt;properties&gt; &lt;project.build.s...

向小凯同学学习 8793
上一篇: [Spring]Resource
下一篇: [Spring]Annotation-based container configuration_AnotationBasis_02
HeapStackk
博客等级 码龄12年 11粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值