java常用注解

一、类注解

用于标识此类是一个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());
    }
}

你可能感兴趣的:(java,spring,spring,java,后端)