【发布时间】:2016-09-10 07:35:10
【问题描述】:
我有一个使用注释的大型 Spring Web 应用程序。但是,有些类使用 @component/service 注释,但不会从调用它们的位置自动装配。而是使用 new 运算符。
我想找出所有使用 new 运算符的用户定义类的实例。
基本上,我创建了一个新的 Http 包装类(弹簧组件),并从应用程序的多个位置调用它。它在某些地方工作是因为自动连接到它的工作是因为包含类和链开头的类是由 spring 管理的。但是在某些地方它不起作用,因为调用链中的一个类是使用 new 实例化的,并且不是 spring 管理的。所以我想解决这个问题,让这些类也由 spring 管理。
我说的是 100 多个课程,所以请建议一种可以在 3-4 小时内完成并防止人为错误的工具或方法。我用eclipse。
例子:
@Component
public class MyHttpClient {
public int execute() {
...
}
}
@Component
public class UtilC {
@Autowired
private MyHttpClient client;
public int methodC() {
// When methodC is called from A, it works
// but when called from B, it gives NullPointerException
client.execute();
}
}
@Component
public class UtilB {
private UtilC c = new UtilC();
public int methodB() {
c.methodC();
}
}
@Component
public class UtilA {
@Autowired
private UtilC c;
public int methodA() {
c.methodC();
}
}
请不要这样建议:
@Component
public class UtilC {
@Autowired
private MyHttpClient client;
public int methodC() {
try {
client.execute();
} catch(NullPointerException npe) {
new MyHttpClient.execute();
}
}
}
如何搜索所有像 new UtilC 一样实例化的用户定义类
【问题讨论】:
-
他们的名字是否像
SomeService这样你可以为它写一个正则表达式? -
调用层次结构(Ctrl-Alt-H)不能告诉你谁调用了构造函数?如果对象应该是 Spring 管理的,那么除了 Spring 之外,没有人应该调用构造函数,因为 Spring 使用反射来这样做,所以不会显示。如果您没有使用 Call Hierarchy 的构造函数,请临时创建一个。
-
不,他们没有很好地定义为他们编写正则表达式。我可以在 Eclipse 中搜索使用 new 运算符的用户定义类的实例变量吗?
-
find和grep的组合应该可以解决问题。阅读手册条目。 (也可能是xargs。)
标签: java eclipse spring-mvc