一、类注解
用于标识此类是一个spring管理的Bean,以下注解都可以使用类似 @Component(“name”) 来指定名称。
//注解配置类
@Configuration;
//注解通用组件类
@Component;
//注解controller类
@Controller;
//注解Dao类
@Repository;
//注解Service类
@Service;
//注解Properties类 ,其中的 属性 会通过spring宽松绑定规则进行赋值
//相当于在每个属性上使用 @Value("${keyName}") 进行注解
//一般配合 @Configuration 使用,用于生成配置Bean
//2.2.0版本后大部分情况下无需再与@Configuration组合使用
@ConfigurationProperties(prefix = "spring")
// 作用于类或构造方法上,通过函数而非set方法进行属性注入,常与@ConfigurationProperties一起使用,适用于设置不可变属性,建议不可变属性通过构造方法设置而非set方法,此时可以屏蔽set方法。
@ConstructorBinding
// 作用于类上,读取指定资源文件属性,常与@Configuration、@ConfigurationProperties一起使用,可通过application.yml的引入配置取代该注解的使用。
@PropertySource
//生成指定package下@ConfigurationProperties注解的属性配置类单例并进行属性注入放入容器管理。
@ConfigurationPropertiesScan
//作用域参数上,设置不可变属性时的默认值的注释。
@DefaultValue
二、属性注解
一般用于获取spring管理的Bean
//用于注解 依赖注入的字段,name省略时按类型注入
@Resource(name="xxx")
//用于注解 依赖注入的字段(会使字段public)
//也可以放在对应字段的set方法上
//也可以放在构造方法上,用于注入构造方法的参数(推荐用法)
@Autowired
//用于注解 依赖注入的字段
@Inject
//配合 @Autowired 使用,用于限定同类型的Bean的名称
@Qualifier("name")
// 常用于字段上,将Spring加载到的属性匹配注入到当前实例字段,可通过冒号:设置属性默认值。
@Value
三、方法注解
//产生一个Bean,然后交给Spring容器。
//一般用于根据配置文件产生特定类(非自定义的第三方类)
//方法中一般调用第三方类的构造方法或工厂方法。
@Bean
//在构造函数之后执行,并且只会被服务器执行一次
@PostConstruct
//用于注解 需要在destroy()方法执行之后执行的方法
@PreDestroy
@Profile 允许选择性地包含某些bean。
@Scope 将bean的范围从单例更改为指定的范围。
@Lazy 仅在默认单例作用域的情况下才具有实际效果。
@DependsOn 会在创建此bean之前强制创建特定的其他bean,以及该bean通过直接引用表示的任何依赖关系,这通常对单例启动很有帮助。
@Primary 是一种在注入点级别解决歧义的机制如果需要注入单个目标组件,但多个bean按类型匹配,
如果需要注入单个目标组件,但多个Bean按类型匹配
@Order;@Bean 方法还可以声明限定符批注和 @Order,在注入点解析期间要像相应的那样考虑相应组件类上的注释,但每个bean定义可能非常个别(在具有相同 bean类的多个定义的情况下)。在初始类型匹配之后,order的值会缩小候选集的范围;order值确定在收集情况下解析元素的顺序注入点(通过类型和限定符匹配多个目标bean。
@Order 值可能会影响注入点的优先级,但请注意,它们不会影响单例启动顺序,这是依赖关系和 @DependsOn 声明,另外,javax.annotation.Priority 在此级别上不可用,因为它不能在方法上声明。它的语义可以通过 @Order 值与 @Primary 结合使用,以对每种类型的单个bean进行调整。
四、config类的注解方式示例:
yml文件:
#MinIO相关参数
minio:
api_host : http://10.195.10.83:9000
bucket_name : seetaface
access_key: minio
secret_key: minio123
config文件:
@ConfigurationProperties(prefix = "minio")
@Data //lombok的注解,用于生成get,set方法
public class MinioConfig {
private String apiHost;
private String accessKey;
private String secretKey;
}
utils文件:
@Configuration //这里是不能用 @Component 的
@EnableConfigurationProperties(value = MinioConfig.class)
public class MinioUtils2 {
@Autowired
private MinioConfig minioConfig;
/**
* @description: 獲取 MinioClient
* @author: libie
* @dateTime: 2022/5/25 下午 06:49
*
* @return 基於配置文件的 MinioClient
* @throws MinioException 操作過程中建議先捕獲 MinioException ,避免處理太多子異常
*/
public MinioClient getClient() throws MinioException {
return new MinioClient(minioConfig.getApiHost(), minioConfig.getAccessKey(), minioConfig.getSecretKey());
}
}