Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的自定义注释日志bean在自动连接期间为空?_Java_Spring_Annotations - Fatal编程技术网

Java 为什么我的自定义注释日志bean在自动连接期间为空?

Java 为什么我的自定义注释日志bean在自动连接期间为空?,java,spring,annotations,Java,Spring,Annotations,我几乎完全按照示例创建了一个用于日志记录的自定义注释。我能看到的主要区别是我的LoggerInjector是用@组件注释的 注释非常有效,我在任何地方都会得到一个非空的Logger实例,只有一个例外:当我尝试登录一个用@Autowired注释的方法时 例如: @Repository public class MyDao { @AutowiredLogger private Logger _logger; private JdbcTemplate _jt; @A

我几乎完全按照示例创建了一个用于日志记录的自定义注释。我能看到的主要区别是我的
LoggerInjector
是用
@组件
注释的

注释非常有效,我在任何地方都会得到一个非空的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);
    }
}
在第一行
\u logger.debug()
上抛出一个
NullPointerException

applicationContext.xml中的代码段:

<mvc:annotation-driven />
<context:component-scan base-package="my.package" />

dispatch-servlet.xml中的一个片段:

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


在运行
@AutowiredLogger
方法之前,如何注入我的
@AutowiredLogger

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

你可以这样做

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

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

你可以这样做

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

我也遇到过类似的问题,尽管在我的案例中,它是注入
ServletContext
-它在
@Autowired
中为空,我需要实现
初始化bean
,并通过
afterPropertiesSet
更改为setter注入。我也遇到过类似的问题,虽然在我的例子中,它是注入
ServletContext
,但它在
@Autowired
中是空的,我需要实现
初始化bean
,并通过
afterPropertiesSet
更改为setter注入。它做到了,谢谢。我今天才有机会试一下。真的,谢谢你。我今天才有机会尝试一下。