@PostConstruct调用自动装配调用者类的服务

时间:2015-03-06 13:48:00

标签: spring

我有两个班级:

@Component
public class Cache {

    @Autowired
    private UserService userService;

    @PostConstruct
    public void init() {
        userService.doSth();
    }
}

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private Cache cache;

    @Autowired
    private UserRepository repository;

    @Override
    public void doSth() {
        repository.doSth();
    }
}

如果我想部署我的应用程序,我会得到以下异常: org.springframework.beans.factory.BeanCreationException:创建名为'cache'的bean时出错:init方法的调用失败

UserServiceImpl中的所有自动连接字段均为空。

如果我从我的服务中删除了@Autowired私有缓存部分,那么它可以正常工作。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这是PostConstruct的定义。

  

PostConstruct注释用于需要的方法   在完成依赖注入以执行任何操作之后执行   初始化。必须在放入类之前调用​​此方法   投入服务

在您的流程中,我相信您正在等待缓存与userService一起自动装配,并且您的用户服务正在等待缓存自动装配。我想这有点造成依赖问题。您可能必须重新排列逻辑以避免这种依赖性。由于我不知道你的完整流程,我可能无法建议代码替代方案,但这应该给你一个要点,为什么它会发生。