首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring boot中的注解@autowired

spring boot中的注解@autowired
EN

Stack Overflow用户
提问于 2021-04-16 15:45:27
回答 1查看 79关注 0票数 0

我编写basic java已经有一段时间了,现在我体验到了spring boot。

在spring boot中经常可以看到注释。

对我来说,注释是为了节省开发人员的时间来实现更少的代码,根据在线定义。但这并不能满足我下面的问题

到目前为止,我正在体验“自动连线”。让我困惑的是,@autowired启用了依赖注入,并告诉bean配置xml (我还不知道它有多有用)

例如,

代码语言:javascript
复制
class A {

    private int id;

    // With setter and getter method
}

class B {

    private String name;

    @Autowired 
    A a;
    
B(A a){this.a = a} ;
    
    }
}

然而,在basic java中,它不是已经允许在不使用@autowired的情况下将instance作为参数进行传递吗?为什么这突然变成了一种好处?或者我错过了什么?

代码语言:javascript
复制
class A {

    private int id;

    // With setter and getter method
}

class B {

    private String name;

    A a;
B(A a){this.a = a} ;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2021-04-16 16:14:19

这样做会给你带来好处(尽管不推荐这样做)

代码语言:javascript
复制
@Component
class A {

    private int id;

    // With setter and getter method
}

@Component
class B {

    private String name;

    @Autowired 
    A a;
    
    B() {
    
    }
       
}

现在,假设这些类位于@SpringBootApplication注解类的相同或子包中,将为您自动配置,并且A将由Spring框架使用反射注入到B中。

但是,正如我前面提到的,不推荐这样做,您可能希望通过构造函数注入它,因为这会使您的组件更容易测试(您可以轻松地注入mock来代替它)。请注意,当您有一个带有带参数的构造函数的组件/bean时,会推断出@Autowired,spring将尝试为您找到要注入其中的bean。

代码语言:javascript
复制
@Component
class A {

    private int id;

    // With setter and getter method
}

@Component
class B {

    private String name;

    final A a;

    B(A a) {
        this.a = a;
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67121095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档