栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Spring SLF4J记录器的构造函数注入-如何获取注入目标类?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring SLF4J记录器的构造函数注入-如何获取注入目标类?

我使用自定义BeanFactory进行了解析。如果有人提出更好的解决方案,我将很高兴听到。无论如何,这是bean工厂:

import java.util.Set;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.BeansException;import org.springframework.beans.TypeConverter;import org.springframework.beans.factory.config.DependencyDescriptor;import org.springframework.beans.factory.support.DefaultListableBeanFactory;public class CustomBeanFactory extends DefaultListableBeanFactory {    public CustomBeanFactory() {    }    public CustomBeanFactory(DefaultListableBeanFactory delegate) {        super(delegate);    }    @Override    public Object resolveDependency(DependencyDescriptor descriptor, String beanName, Set<String> autowiredBeanNames, TypeConverter typeConverter) throws BeansException {        //Assign Logger parameters if required   if (descriptor.isRequired()     && Logger.class.isAssignableFrom(descriptor  .getMethodParameter().getParameterType())) {  return LoggerFactory.getLogger(descriptor.getMethodParameter()         .getDeclaringClass());        } else { return super.resolveDependency(descriptor, beanName,         autowiredBeanNames, typeConverter);        }    }}

XML配置的用法示例:

        CustomBeanFactory customBeanFactory = new CustomBeanFactory();   GenericApplicationContext ctx = new GenericApplicationContext(customBeanFactory);        XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(ctx);        xmlReader.loadBeanDefinitions(new ClassPathResource("beans.xml"));        ctx.refresh();

编辑:

您可以在下面找到Arend v。Reinersdorffs的改进版本(请参阅注释以获取解释)。

import java.lang.reflect.Field;import java.util.Set;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.BeansException;import org.springframework.beans.TypeConverter;import org.springframework.beans.factory.config.DependencyDescriptor;import org.springframework.beans.factory.support.DefaultListableBeanFactory;import org.springframework.core.MethodParameter;public class CustomBeanFactory extends DefaultListableBeanFactory {    public CustomBeanFactory() {    }    public CustomBeanFactory(DefaultListableBeanFactory delegate) {        super(delegate);    }    @Override    public Object resolveDependency(DependencyDescriptor descriptor, String beanName, Set<String> autowiredBeanNames, TypeConverter typeConverter) throws BeansException {        //Assign Logger parameters if required   if (Logger.class == descriptor.getDependencyType()) {  return LoggerFactory.getLogger(getDeclaringClass(descriptor));        } else { return super.resolveDependency(descriptor, beanName,         autowiredBeanNames, typeConverter);        }    }    private Class<?> getDeclaringClass(DependencyDescriptor descriptor) {        MethodParameter methodParameter = descriptor.getMethodParameter();        if (methodParameter != null) { return methodParameter.getDeclaringClass();        }        Field field = descriptor.getField();        if (field != null) { return field.getDeclaringClass();        }        throw new AssertionError("Injection must be into a method parameter or field.");    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/454233.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号