自动装配在一个班级而不是在其他班级工作

时间:2013-06-06 11:09:47

标签: java spring-mvc autowired

我有一个像这样的自动装配的课程

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

5 个答案:

答案 0 :(得分:0)

你的第二课是否标记为春豆? 您是否在春季扫描了第二堂课的包裹?

您可以在spring site

查看配置示例

编辑: 为你想要注入的bean创建一个setter

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

答案 1 :(得分:0)

春天找不到班级ApiConnection,因为它既没有@Component也没有@Repository注释。

如果您使用@Component为您的班级添加注释,那么它应该有用。

还要确保弹簧扫描包含该类的包。

答案 2 :(得分:0)

尝试向ApiConnection添加一个接口,以验证它是否被Spring Container加载。

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

    ....
}

对自动装配类执行相同操作,并验证它们是否在相同的上下文中加载。

你的问题可能是:

  1. bean未使用spring初始化
  2. 自动装配的bean属于另一个上下文
  3. 没有使用< context:annotation-config />
  4. 指示ApiConnection的上下文

答案 3 :(得分:0)

我找到了解决方案。由于ApiConnection对象是手动创建的,因此Spring框架不会自动装配它。

答案 4 :(得分:0)

我遇到了同样的问题,并通过向第二个班级@Service添加public class ApiConnection来解决这个问题。第一堂课已经有@Service。在此步骤中,它仍然不起作用(返回NullPointerException)。此外,在使用ApiConnection的班级中,让我们说ApplicationImpl,我在ApiConnection apiConnection;上添加了@Autowired(之前使用的是ApiConnection apiConnection = new XXX)。然后它工作。