java - 通过注释连接 Spring 构造函数

标签 java spring spring-mvc annotations

我正在借助 Spring 注释连接一个类:

public class MyClass {

    @Autowired
    private B b ;

    @Value("${foo}")
    private String c ;

    @Value("${bar}")
    private Integer i ;

    public MyClass (B b, String c, Integer i) {
            this.b = b ;
            this.c = c ;
            this.i = i ;
    }
}

我想从字段中删除注释,并将它们移动到构造函数中:

public class MyClass {

    private B b ;

    private String c ;

    private Integer i ;

    @Autowired
    public MyClass (B b, @Value("${foo}") String c, @Value("${bar}") Integer i) {
            this.b = b ;
            this.c = c ;
            this.i = i ;
    }
}

上面的方法好吗?它使类(class)变得不那么漂亮。有没有其他方法可以使用注释来做到这一点?

此外,这是否意味着 b 是 Autowiring 的,而 c 和 i 是通过 @Value 装配的?也就是说,这里使用 @Value 注释是否会覆盖 c 和 i 的 @Autowired 注释?

附言:我将注释放在构造函数上,因为我不想编写 setter,只测试类。所以我必须编写一个接受参数的构造函数,并给我一个设置了所有字段的对象。 Spring 的问题是,如果我在字段上放置参数,并编写一个接受参数的构造函数,那么我还必须编写一个无参数构造函数,我不想这样做,因为这意味着对于这个类的测试,我可以调用无参数构造函数来创建一个对象,然后调用 setter 来设置字段。

最佳答案

在这种情况下,我根本不会使用 Autowiring ,而是将 args 从 bean 定义注入(inject)到构造函数中。

public class MyClass {
    private final B b ;
    private final String c ;
    private final Integer i ;

    public MyClass (B b, String c, Integer i) {
            this.b = b ;
            this.c = c ;
            this.i = i ;
    }
}

关于java - 通过注释连接 Spring 构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16231881/

相关文章:

java - 了解 Java 中的检查异常与非检查异常

java - 当需要 int 时,阻止程序接受 double 值

Java 创建一个 api 来公开 csv 而不是 json

java - 在 Spring MVC 中处理更新表单

spring - 如何在java配置文件(非XML)中启用Spring MVC应用程序支持的异步

java - 为什么此代码无法使用 Rest API 发布任何内容?

spring - 未找到 REST CXF 和 Spring cxf-extension-jaxrs-binding 文件异常?

API 的 Spring Security 和 token 身份验证

Javascript:解析 json 响应时遇到问题

java - 如何在 Spring Restful Webservice 中接受 JSON 输入?