spring - 为什么 @Autowired 在 @Configuration 内部时无需 @Component 即可工作

标签 spring spring-mvc shiro

我正在配置 shiro-spring-starter。

@Configuration
public class ShiroConfig {
    @Bean
    public Realm realm() {
        return new UserRealm();
    }
}
\\Without @Component
public class UserRealm extends AuthorizingRealm {
    
    @Autowired
    private UserMapper userMapper;
}

UserRealm 是使用“new UserRealm()”创建的,没有@Component。 为什么@Autowired 有效?

最佳答案

在您的代码中,不需要 @Component 注释,因为您已在 ShiroConfig 中将 UserRealm 对象创建为 spring bean类(class)。由于它是一个 spring bean,spring 将管理该对象并执行由 @Autowired 注解指定的依赖项注入(inject)。

如果您没有在 ShiroConfig 类中将 UserRealm 对象创建为 spring bean,则需要 @Component 注解在 UserRealm 类上。假设启用了组件扫描,@Component 注释将导致 spring 自动创建 UserRealm 类的实例作为 spring bean。

因此,您要么不使用@Component注释并在配置类中手动创建spring bean,要么使用@Component注释并让spring自动创建 Spring Bean 。结果是一样的。

关于spring - 为什么 @Autowired 在 @Configuration 内部时无需 @Component 即可工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68932158/

相关文章:

java - 无法从 bootstrap.yml 读取配置服务器 uri

java - Spring 形式的 Hashmap

java - 如何使用spring security(spring boot)实现Ldap认证

Java-从 LDAP 检索 shiro 的权限

Spring 上下文测试找不到配置位置

java - 如何在 Spring Boot 运行时添加新的数据源

java - 如何在jpa中使用ISNULL

java - EL1012E : Cannot index into a null value

spring - 使用注释的Shiro授权许可检查不起作用

java - 使用 shiro 散列和加盐密码