Java 自动布线在一个类中工作,但在另一个类中不工作
我有一个像这样的自动连线类Java 自动布线在一个类中工作,但在另一个类中不工作,java,spring-mvc,autowired,Java,Spring Mvc,Autowired,我有一个像这样的自动连线类 @Component public class APIPermissionCheck { .............. } 它可以在一个java文件中运行。但是它在其他java文件中总是返回null。可能的原因是什么?如何调试/修复此问题 在这个班上学习很好 @Repository("MyClassRepo") public class MyClassRepoImpl implements MyClassRepo { ....... @Autowir
@Component
public class APIPermissionCheck {
..............
}
它可以在一个java文件中运行。但是它在其他java文件中总是返回null。可能的原因是什么?如何调试/修复此问题
在这个班上学习很好
@Repository("MyClassRepo")
public class MyClassRepoImpl implements MyClassRepo {
.......
@Autowired
private APIPermissionCheck apiPermissionCheck;
.......
}
public class ApiConnection {
.......
@Autowired
private APIPermissionCheck apiPermissionCheck;
.......
}
不在这个班工作
@Repository("MyClassRepo")
public class MyClassRepoImpl implements MyClassRepo {
.......
@Autowired
private APIPermissionCheck apiPermissionCheck;
.......
}
public class ApiConnection {
.......
@Autowired
private APIPermissionCheck apiPermissionCheck;
.......
}
您的第二个类是否标记为SpringBean? 你会在春季前扫描你的第二节课的包裹吗 您可以在以下位置查看配置示例: 编辑: 为您尝试注入的bean创建setter
public void setApiPermissionCheck(APIPermissionCheck apiPermissionCheck){
this.apiPermissionCheck = apiPermissionCheck
}
spring找不到类
ApiConnection
,因为它既没有注释为@组件
,也没有注释为@存储库
如果使用@组件对类进行注释
,它应该可以工作
还要确保spring扫描了包含该类的包。尝试向ApiConnection添加一个接口,以验证spring容器是否正在加载它
ApiConneection implements ApplicationContextAware {
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
logger.info("Initializing context is:" + applicationContext);
}
....
}
对自动布线类执行相同的操作,并验证它们是否在同一上下文中加载
你的问题可能是:
我找到了解决办法。由于ApiConnection对象是在很多地方手动创建的,因此spring framework不会自动连接它。我遇到了同样的问题,并通过向第二个类
公共类ApiConnection添加@Service
解决了这个问题。第一个类已经有一个@服务
。在此步骤中,它仍然不起作用(returnNullPointerException
)。此外,在使用ApiConnection
的类中,比如说ApplicationImpl
,我添加了@Autowired onApiConnection ApiConnection代码>(ApiConnection ApiConnection=new XXX
以前使用过)。然后它就起作用了 我的Web应用程序已经配置好了,所以如果它被标记为@Component,那么它会自动连接,不知道为什么它不能用于ApiConnection类。存储库括号中会有什么?我不是从任何基类实现它。@coure2011请检查包含类ApiConnection
的包是否由spring扫描。是的,包扫描已经在com.myweb.freshCode上进行,而ApiConnection类在com.myweb.freshCode包中。您可以将它放在spring配置文件(定义bean的地方)中创建了像Yes setter这样的节点,但仍然没有帮助如何调查/修复自动连线bean属于另一个上下文?将相同的接口添加到自动连线bean。以相同的方式记录应用程序上下文(将出现类似BlaBlaBla@12ax5121). 比较十六进制中的地址(在@之后),它们应该相等是它的设置正确,我得到logger.info初始化上下文是:ApiConnection和APIPPermissionCheck类的根。尝试输出applicationContext.hashCode()以及名称。根-什么都不说,您可能有多个上下文。ConfigurationManager@40b00a66是在APIPermissionCheck之后生成的,但在ApiConnection之后没有这样的值。那么,您是如何修复它的?