我几乎完全按照示例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}}?
答案 0 :(得分:4)
我认为您无法控制哪个组件首先进行自动装配。另一种解决方案是在设置完所有内容后使用InitializingBean配置类。
你可能喜欢
@Override
void afterPropertiesSet() {
_logger.debug("Entering setDs")
_jt = new JdbcTemplate(ds);
_logger.debut("Exiting setDs);
}