将 Spring 字段注入转换为构造函数注入(IntelliJ IDEA)?
Convert Spring field injection to constructor injection (IntelliJ IDEA)?
我确信将我的 Spring Java 字段注入 [@Autowired] 转换为构造函数注入(among other reasons,以促进模拟单元测试)...
是否有一个实用程序可以用来自动执行 Spring 字段到构造函数注入的转换?
例如,IntelliJ IDEA 有很多东西的生成快捷方式(即:为字段生成 setter 和 getter);我希望有类似的东西......当手动进行转换很乏味时,这特别有用,因为要转换的 class 已经有许多字段注入字段。
开箱即用。
我的做法是搜索并替换
@Autowired private
至
@Autowired private final
.
然后显示错误,说最终字段未初始化。
如果您执行自动完成 (Alt+Enter),那么它会询问您是否要创建构造函数,然后您可以 select 字段并单击 Enter。
私人只是一个例子。它可以是任何修饰符。最主要的是让字段最终化,这样 Idea 就会报错,我们可以启动自动完成来生成所需的构造函数
是的,现在已在 IntelliJ IDEA 中实现。
1) 将光标放在 @Autowired
注释之一上。
2) 命中 Alt+Enter
.
3) Select Create constructor
这是quick fix related to the inspection "Field injection warning":
Spring Team recommends: "Always use constructor based dependency
injection in your beans. Always use assertions for mandatory
dependencies".
Field injection/NullPointerException example:
class MyComponent {
@Inject MyCollaborator collaborator;
public void myBusinessMethod() {
collaborator.doSomething(); // -> NullPointerException
}
}
Constructor injection should be used:
class MyComponent {
private final MyCollaborator collaborator;
@Inject
public MyComponent(MyCollaborator collaborator) {
Assert.notNull(collaborator, "MyCollaborator must not be null!");
this.collaborator = collaborator;
}
public void myBusinessMethod() {
collaborator.doSomething(); // -> safe
}
}
我确信将我的 Spring Java 字段注入 [@Autowired] 转换为构造函数注入(among other reasons,以促进模拟单元测试)...
是否有一个实用程序可以用来自动执行 Spring 字段到构造函数注入的转换?
例如,IntelliJ IDEA 有很多东西的生成快捷方式(即:为字段生成 setter 和 getter);我希望有类似的东西......当手动进行转换很乏味时,这特别有用,因为要转换的 class 已经有许多字段注入字段。
开箱即用。
我的做法是搜索并替换
@Autowired private
至
@Autowired private final
.
然后显示错误,说最终字段未初始化。
如果您执行自动完成 (Alt+Enter),那么它会询问您是否要创建构造函数,然后您可以 select 字段并单击 Enter。
私人只是一个例子。它可以是任何修饰符。最主要的是让字段最终化,这样 Idea 就会报错,我们可以启动自动完成来生成所需的构造函数
是的,现在已在 IntelliJ IDEA 中实现。
1) 将光标放在 @Autowired
注释之一上。
2) 命中 Alt+Enter
.
3) Select Create constructor
这是quick fix related to the inspection "Field injection warning":
Spring Team recommends: "Always use constructor based dependency injection in your beans. Always use assertions for mandatory dependencies".
Field injection/NullPointerException example:
class MyComponent { @Inject MyCollaborator collaborator; public void myBusinessMethod() { collaborator.doSomething(); // -> NullPointerException } }
Constructor injection should be used:
class MyComponent { private final MyCollaborator collaborator; @Inject public MyComponent(MyCollaborator collaborator) { Assert.notNull(collaborator, "MyCollaborator must not be null!"); this.collaborator = collaborator; } public void myBusinessMethod() { collaborator.doSomething(); // -> safe } }