为什么我的自定义注释日志记录bean在自动装配期间为空?

时间:2011-09-27 22:08:57

标签: java spring annotations

我几乎完全按照示例in this blog post创建了一个自定义注释用于记录。我可以看到的主要区别是我的LoggerInjector注释了@Component

注释效果很好,除了一种情况外,我在任何地方都得到一个非空的Logger实例:当我尝试登录用@Autowired注释的方法时。

例如:

@Repository
public class MyDao
{
    @AutowiredLogger
    private Logger _logger;

    private JdbcTemplate _jt;

    @Autowired
    public void setDatasource(DataSource ds)
    {
        _logger.debug("Entering setDs")
        _jt = new JdbcTemplate(ds);
        _logger.debut("Exiting setDs);
    }
}

NullPointerException行的第_logger.debug()行投放<mvc:annotation-driven /> <context:component-scan base-package="my.package" />

来自applicationContext.xml的片段:

<mvc:annotation-driven />
<context:component-scan base-package="my.package">
    <context:include-filter type="annotation"
             expression="org.springframework.stereotype.Repository" />
</context:component-scan>

dispatch-servlet.xml的片段:

@AutowiredLogger

如何在运行@Autowired方法之前注入{{1}}?

1 个答案:

答案 0 :(得分:4)

我认为您无法控制哪个组件首先进行自动装配。另一种解决方案是在设置完所有内容后使用InitializingBean配置类。

你可能喜欢

@Override
void afterPropertiesSet() {
    _logger.debug("Entering setDs")
    _jt = new JdbcTemplate(ds);
    _logger.debut("Exiting setDs);
}