Spring @Autowired 字段 - 哪个访问修饰符是私有的还是包私有的

作者:编程家 分类: spring 时间:2025-07-14

在Spring中,@Autowired注解用于自动装配依赖关系,可以将一个Bean注入到另一个Bean中。在使用@Autowired注解时,被注解的字段可以有不同的访问修饰符,包括公有的、私有的和包私有的。但是,只有公有的和包私有的字段才能被@Autowired注解注入依赖。

公有字段可以被@Autowired注解注入依赖

公有字段是指使用public修饰符声明的字段,它可以被外部类直接访问。在Spring中,如果一个字段被@Autowired注解标记为自动装配依赖关系,并且该字段是公有的,Spring容器会自动将符合类型要求的Bean注入到该字段中。

下面是一个使用@Autowired注解注入公有字段的示例代码:

public class UserService {

@Autowired

public UserDao userDao;

// ...

}

在上面的示例中,UserService类中的userDao字段被@Autowired注解标记,并且是公有的。当Spring容器创建UserService对象时,会自动将符合类型要求的UserDao对象注入到userDao字段中。

包私有字段可以被@Autowired注解注入依赖

包私有字段是指使用默认的访问修饰符(即不使用任何修饰符)声明的字段,它只能被同一个包中的类访问。在Spring中,如果一个字段被@Autowired注解标记为自动装配依赖关系,并且该字段是包私有的,Spring容器同样会自动将符合类型要求的Bean注入到该字段中。

下面是一个使用@Autowired注解注入包私有字段的示例代码:

public class UserService {

@Autowired

UserDao userDao;

// ...

}

在上面的示例中,UserService类中的userDao字段被@Autowired注解标记,并且是包私有的。当Spring容器创建UserService对象时,会自动将符合类型要求的UserDao对象注入到userDao字段中。

私有字段无法被@Autowired注解注入依赖

私有字段是指使用private修饰符声明的字段,它只能在当前类中访问,无法被其他类直接访问。在Spring中,如果一个字段被@Autowired注解标记为自动装配依赖关系,并且该字段是私有的,Spring容器无法直接将Bean注入到该字段中。

下面是一个使用@Autowired注解注入私有字段的示例代码:

public class UserService {

@Autowired

private UserDao userDao;

// ...

}

在上面的示例中,UserService类中的userDao字段被@Autowired注解标记,并且是私有的。当Spring容器创建UserService对象时,无法将符合类型要求的UserDao对象直接注入到userDao字段中。这时可以通过使用@Autowired注解标记在set方法上,或者通过使用@Resource注解来解决依赖注入的问题。

被@Autowired注解标记的字段可以有不同的访问修饰符,其中公有字段和包私有字段可以被Spring容器自动注入依赖,而私有字段无法直接被注入,需要采取其他方式来解决依赖注入的问题。