SpringBoot为什么有的工具类要加@Component,有的工具类不加?

第一,为什么要加@Component注解?

主要含义:


Bean 自动发现:
当 Spring 应用启动时,它会扫描带有 @Component 注解的类,并将它们注册为 Spring 容器中的 Bean。
这意味着这些类的实例将由 Spring 管理,可以被依赖注入(Dependency Injection)到其他 Bean 中。
依赖注入:
通过 @Autowired 或 @Inject 注解,可以将 Spring 管理的 Bean 注入到其他类中。
例如,如果工具类被标记为 @Component,则可以在其他类中通过 @Autowired 注解注入工具类实例

第二,那为什么有的工具类要加@Component,有的不加?

这里我给大家两个常用的实例


//JWT工具类

public class JwtUtil {
    /**
     * 生成jwt
     * 使用Hs256算法, 私匙使用固定秘钥
     *
     * @param secretKey jwt秘钥
     * @param ttlMillis jwt过期时间(毫秒)
     * @param claims    设置的信息
     * @return
     */
    public static String createJWT(String secretKey, long ttlMillis, Map<String, Object> claims) {
            //.......
       }

  
    public static Claims parseJWT(String secretKey, String token) {
           //........
       }

}

 //阿里云 OSS 工具类
@Component
public class AliOssUtil {

    @Autowired
    private AliOssProperties aliOSSProperties;
    EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

    public AliOssUtil() throws ClientException {
    }

    public String upload(MultipartFile file) throws IOException {

      //......
    }
}

以上两个例子一个是JWT工具类---JwtUtil,一个是阿里云oss工具类

明显可以观察到JwtUtil中的方法都是静态方法,而静态方法可以直接通过类名调用,不需要实例化对象。

第三,那为什么我们不能把工具类的方法都变为静态方法

在 Java 中,静态方法属于类级别,而不是实例级别(对象)。因此,静态方法不能直接使用依赖注入(如 @Autowired)来注入实例变量。这是因为依赖注入通常是在类的实例化过程中进行的,而静态方法不依赖于类的实例。

简而言之,如果此工具类需要注入其他实例变量,那么就不能使用静态方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值