java—自动连线在一个类中工作,但在另一个类中不工作

31moq8wy  于 2021-06-30  发布在  Java
关注(0)|答案(5)|浏览(199)

我有一个像这样的自动连线课程

@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;
    .......
}
qmb5sa22

qmb5sa221#

班级 ApiConnection 未被spring找到,因为它既没有注解为 @Component 两者都不是 @Repository .
如果你用 @Component 应该有用。
还要确保spring扫描了包含该类的包。

olhwl3o2

olhwl3o22#

你的第二节课标的是 Spring Bean 吗?你在 Spring 前扫描过你第二节课的包裹吗?
您可以在spring站点查看配置示例
编辑:为您尝试注入的bean创建一个setter

public void setApiPermissionCheck(APIPermissionCheck apiPermissionCheck){
       this.apiPermissionCheck = apiPermissionCheck 
}
cwxwcias

cwxwcias3#

我遇到了同样的问题,通过添加 @Service 第二节课 public class ApiConnection . 第一节课已经有 @Service . 在此步骤中,它仍然不起作用(返回 NullPointerException ). 另外,在使用 ApiConnection ,比如说 ApplicationImpl ,我添加了@autowired on ApiConnection apiConnection; ( ApiConnection apiConnection = new XXX 以前使用过)。那就行了。

a2mppw5e

a2mppw5e4#

我找到了解决办法。由于apiconnection对象是手动创建的,所以spring框架不会自动连接它。

tp5buhyn

tp5buhyn5#

尝试向apiconnection添加一个接口,以验证它是否由spring容器加载。

ApiConneection implements ApplicationContextAware {
    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        logger.info("Initializing context is:" + applicationContext);
    }

    ....
}

对autowiring类执行相同的操作,并验证它们是在同一上下文中加载的。
你的问题可能是:
bean没有用spring初始化
自动连线bean属于另一个上下文
apiconnection的上下文未使用指示context:annotation-config/

相关问题