首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Guice log4j自定义注入不支持在构造函数中进行日志记录

关于Guice log4j自定义注入不支持在构造函数中进行日志记录的问题,我们可以从以下几个方面来解决:

  1. 使用静态日志记录器

在构造函数中,可以使用静态日志记录器来记录日志。这样可以避免在构造函数中使用注入的方式来记录日志。例如:

代码语言:java
复制
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyClass {
    private static final Logger logger = LogManager.getLogger(MyClass.class);

    public MyClass() {
        logger.info("MyClass 构造函数被调用");
    }
}
  1. 使用依赖注入框架

可以使用依赖注入框架来实现日志记录器的注入。例如,使用Guice框架,可以在构造函数中注入日志记录器:

代码语言:java
复制
import com.google.inject.Inject;
import org.apache.logging.log4j.Logger;

public class MyClass {
    private final Logger logger;

    @Inject
    public MyClass(Logger logger) {
        this.logger = logger;
        logger.info("MyClass 构造函数被调用");
    }
}
  1. 使用Provider注入

如果在构造函数中使用注入的方式仍然不能满足需求,可以使用Provider注入。例如:

代码语言:java
复制
import com.google.inject.Inject;
import com.google.inject.Provider;
import org.apache.logging.log4j.Logger;

public class MyClass {
    private final Logger logger;

    @Inject
    public MyClass(Provider<Logger> loggerProvider) {
        this.logger = loggerProvider.get();
        logger.info("MyClass 构造函数被调用");
    }
}

总之,Guice log4j自定义注入不支持在构造函数中进行日志记录,但可以通过使用静态日志记录器、依赖注入框架或Provider注入来解决这个问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

2018年不能错过的 14 个 Java 库!

Guice Guice是一个Java 6以上支持依赖注入框架。由谷歌提供。 ? OkHttp HTTP是现代网络的通讯方式。决定我们如何交换数据和媒体。...@NoArgsConstructor,@RequiredArgsConstructor和@AllArgsConstructor - 按顺序构造构造函数:生成不带参数,每个final /非空字段有一个参数或每个字段有一个参数的构造函数...SLF4j Simple Logging Facade for Java (SLF4J)用作各种日志框架(例如java.util.logging,logback,log4j)的简单封装管理抽象,允许最终用户部署时插入所需的日志框架...JUnitParams 与标准JUnit的主要区别: 更明确 - params是测试方法参数,而不是类字段 更少的代码 - 你不需要一个构造函数来设置参数 您可以一个类混合使用非参数方法的参数...API,JSON文件和通过HTTP的JSON进行配置 记录/回放存根 故障注入 每次请求的条件代理 浏览器代理请求检查和替换 状态行为模拟 可配置的响应延迟 ?

1.5K10

Google 开源的依赖注入库,比 Spring 更小更快!

*/ Receipt chargeOrder(PizzaOrder order, CreditCard creditCard); } 使用new的方式获取信用卡支付处理器和数据库交易日志记录器:...相比于new,更容易想到的改进是使用工厂方法,但是工厂方法测试仍存在问题(因为通常使用全局变量来保存实例,如果在用例未重置可能会影响其他用例)。...然后只需原有的构造方法增加@Inject注解即可注入 : public class RealBillingService implements BillingService { private...(PayPalCreditCardProcessor.class); 可以看到模块的绑定时用annotatedWith方法指定具体的注解来进行绑定,这种方式有一个问题就是我们必须增加自定义的注解来绑定...; 模块的处理必须要快并且无副作用 Providers绑定当心IO问题:因为Provider不检查异常、不支持超时、不支持重试; 不用在模块处理分支逻辑 尽可能不要暴露构造器 ---- ----

91720

Google 开源的依赖注入库,比 Spring 更小更快!

*/ Receipt chargeOrder(PizzaOrder order, CreditCard creditCard); } 使用new的方式获取信用卡支付处理器和数据库交易日志记录器: public...相比于new,更容易想到的改进是使用工厂方法,但是工厂方法测试仍存在问题(因为通常使用全局变量来保存实例,如果在用例未重置可能会影响其他用例)。...然后只需原有的构造方法增加@Inject注解即可注入 : public class RealBillingService implements BillingService { private...(PayPalCreditCardProcessor.class); 可以看到模块的绑定时用annotatedWith方法指定具体的注解来进行绑定,这种方式有一个问题就是我们必须增加自定义的注解来绑定...; 模块的处理必须要快并且无副作用 Providers绑定当心IO问题:因为Provider不检查异常、不支持超时、不支持重试; 不用在模块处理分支逻辑 尽可能不要暴露构造

1.1K10

2018 年你可能已经错过的 Java 类库

Awaitility Spock WireMock Guice Guice (发音同 ‘juice’) ,是一个 Google 开发的轻量级依赖性注入框架,适合 Java 6 以上的版本。...@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor - 定做构造函数:为你生成各种各样的构造函数,包括无参的,每一个...GitHub, Website Java简单日志门面(SLF4J) Java简单日志门面 (SLF4J) 为不同的日志框架(比如java.util.logging, logback, log4j)提供了简单的门面或者抽象的实现...,允许最终用户部署时能够接入自己想要使用的日志框架。...与标准的JUnit 参数化运行器的区别如下: 更明确 - 参数实在测试方法的参数,而不是类的字段 更少的代码 - 你不需要用构造函数来设置参数 你可以同一个类混合使用参数化和非参数化的方法。

1.6K20

2017 年你不能错过的 Java 类库

Guice Guice (发音同 ‘juice’) ,是一个 Google 开发的轻量级依赖性注入框架,适合 Java 6 以上的版本。 ?...@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor - 定做构造函数:为你生成各种各样的构造函数,包括无参的,每一个...GitHub, Website Java简单日志门面(SLF4J) Java简单日志门面 (SLF4J) 为不同的日志框架(比如java.util.logging, logback, log4j)提供了简单的门面或者抽象的实现...与标准的JUnit 参数化运行器的区别如下: 更明确 – 参数实在测试方法的参数,而不是类的字段 更少的代码 – 你不需要用构造函数来设置参数 你可以同一个类混合使用参数化和非参数化的方法。...内容的模式 请求验证 单元测试里运行,但是是作为一个对立的进程或者一个WAR应用的形式 可通过流畅的Java API、JSON文件和基于HTTP的JSON进行配置 对stub的录制/回放 故障注入 针对每个请求的根据条件进行代理

1.5K10

Google Guice 快速入门

实现我们使用了业务接口和日志接口处理业务逻辑和打印日志信息。...如果希望构造器中注入依赖的话,只需要添加 @Inject 注解即可 Guice配置完之后,我们需要调用 Guice.createInjector 方法传入配置类来创建一个注入器,然后使用注入器的 getInstance...下面的例子,当我们需要 TransactionLog 的时候,Guice最后会为我们注入 MySqlDatabaseTransactionLog 对象。...最简单的办法就是使用 @Named 注解进行区分 首先需要在要注入的地方添加 @Named 注解 public class RealBillingService implements BillingService...该方法我们可以编写任意代码来构造对象 public class BillingModule extends AbstractModule { @Override protected void

1.8K40

Guice之IOC教程

Guice 在上一篇博客, 我们讲解了Spring的IOC示例与实现, 本文着重介绍Guice注入以及与Spring的差异....Guice是Google开发的, 一个轻量级的依赖注入框架, 跟Spring最大的区别在于脱离xml配置,  大量使用Annotation来实现注入, 支持属性, 构造器, setter等多种方式注入对象...this.service1 = service1; 4 this.service2 = service2; 5 } 构造函数会自动注入多个参数, 因此只要写一个@Inject即可...如果有多个构造函数, 只能在一个构造函数上加Inject, 不然会报错 has more than one constructor annotated with @Inject 同理Setter注入...实际业务场景, 大部分构造函数的参数是动态从外部传递进来的, 并不是直接new出来的. 1 public class ServiceImpl implements TestService{ 2

2K90

Maven容器的下半场:Guice,听说仅次于Spring

这里说,把组件解析后,存放到了Guice容器,这个也不是特别准确,更准确的说法是,放到了基于Guice进行了一层封装的一个容器,这个容器叫做:sisu,由eclipse维护这个开源项目(https...Guice,存东西的多种方式 概览 存东西,Guice的文档里,名词叫做Binding,中文就是绑定吧。...public class UtilService { } 像上面这个情况,那肯定是直接调用这个类的构造函数了。 6....接口绑定到一个构造函数:ToConstructorBindings 哎,我是越来越无语了,Guice的骚操作真是多啊。 7....如以下为构造注入: 其他支持的特性 其他的,比如循环依赖、aop也是大体支持的,只是这个容器安卓端用,会有问题,因为aop好像不太支持,所以给安卓端还专供了一个去掉aop的版本。

89340

Google开源依赖注入框架-Guice指南

那么何时使用在代码中使用 Guice 进行注入呢?一般来说,如果在你的应用代码业务对象 (Business Objects) 之间的关系或者依赖需要维护的话,你就可以使用Guice 进行注入。...通过bind,我们可以实现Guice如何将依赖项注入到一个类, 我们com.google.inject.AbstractModule的实现定义: public class BasicModule...构造函数绑定 我们还可以使用构造函数绑定注入一个没有默认无参数构造函数的依赖对象: ​ @Override protected void configure() { bind...依赖注入类型 Guice支持DI所推荐的标准注入类型。假设在Communicator类,我们需要注入不同类型的CommunicationMode,可以通过下面几种方法实现。...构造函数注入 我们还可以使用构造函数注入依赖: @Inject public Communication(@Named("IMComms") CommunicationMode imComms) {

1.7K10

了解这些,你就可以Spring启动时为所欲为了

不依赖于 Spring 的实现,回归 Java 类实现本身,我们可以静态代码块,构造函数实现相应的逻辑,Java 类的初始化顺序依次是静态变量 > 静态代码块 > 全局变量 > 初始化代码块 >...—— 不行,构造函数的env将会发生NullPointException异常。...这是因为 Spring 中将先初始化 Bean,也就是会先调用类的构造函数,然后才注入成员变量依赖的 Bean(@Autowired和@Resource注解修饰的成员变量),注意@Value等注解的配置的注入也是构造函数之后...,此时 Bean 的依赖也已经注入完成,因此可以方法调用注入的依赖 Bean。...上面我们成员变量上通过@Autoware注解注入依赖 Bean,但是 Bean 的构造函数函数却无法使用到注入的 Bean(因为 Bean 还未注入),其实我们也是使用 Spring 的构造函数注入方式

1.1K30

Guice依赖注入(构造函数)

本教程主要详细讲解Guice构造函数注入. 我们将通过详细的代码以及步骤进行讲解....: guice就是我们核心要使用的依赖 构造函数注入 --- Guice我们可以通过将需要的实体信息通过构造函数直接注入到我们需要的任意地方,我们通过列举一个例子来实际说明。...注意:本次程序我们并没有通过Module关联到Guice,方便我们快速测试应用等。...(TestGuiceConstructorNo.java:18) 这也就说明我们无法Guice容器中进行实例注入 多参数注入 --- 上述实例我们只是注入了一个参数,那我们尝试一下多参数注入。...Binder For Constructor, Static 代码我们没有向以上两个示例直接使用Guice获取实例,而是使用了binder.requestStaticInjection方式进行注入

70880

工作写报告怎么办?渗透测试报告模版

; 安装和配置适当的监控和日志记录工具,及时检测和响应安全事件。...经过对目标系统的渗透测试,我们发现存在以下安全问题: Apache Log4j远程代码执行漏洞(CVE-2021-44228) 漏洞描述:由于Log4j 2.x处理特定的参数时存在代码注入漏洞,攻击者可以通过构造特定的参数实现远程代码执行...解决方案:升级到最新版本的Log4j,或者通过禁用Log4j来解决问题。升级之前,可以通过添加自定义安全策略和过滤器来限制攻击。...SQL注入漏洞 漏洞描述:目标系统存在SQL注入漏洞,攻击者可以通过构造恶意的SQL语句来获取敏感信息或进行其他恶意操作。 风险评估:高。...增加安全日志记录和监控机制。 同时,建议渗透测试之后进行定期安全测试和风险评估,以确保系统的安全性和可靠性。

49120

Dubbo源码篇08---依赖注入和AOPDubbo的实现

为了防止我们自定义的ExtensionInjector把dubbo内部默认的依赖注入过程搅乱,需要通过注解打标记,限制我们自定义的ExtensionInjector所能处理的依赖注入范围: public...wrapperClassesList); } //wrapper class搜集是满足存在一个单参数的拷贝构造函数...(match) { //满足则进入装饰流程 //1.实例化当前装饰类,采用的是单参的拷贝构造函数...); return instance; } ... } 这里简单说明一下装饰条件指的是什么: 首先,如果某个扩展类型存在某个扩展实现,该扩展实现类存在一个拷贝构造函数...,而Guice没有对Spring进行装饰,因为其类上的@Wrapper注解限制了其只会对扩展别名为springBoot的扩展实现进行装饰。

21310

Guice依赖注入(Scope)

本文章主要详细讲解Guice依赖注入的一些高级选项,他们分别是Scope,Eagerly Loading Bindings,Stage,Optional Injection。...将使用它来注释guice构造的类型,@Provides方法和bind语法的in() package io.edurt.lc.guice.annotation; import com.google.inject.ScopeAnnotation...当我们传递的线程没有构造一个对象时,先构造一个,然后放入线程上下文中,以后每次都从线程获取对象。...接下来src/test/java目录创建io.edurt.lc.guice.TestGuiceCustomScope类文件进行定义的服务进行测试,添加以下代码 package io.edurt.lc.guice...接下来src/main/java目录创建io.edurt.lc.guice.GuiceCustomScopeModule类文件绑定自定义Scope注解,我们通过实现Module进行注入,添加以下代码

1K30

3分钟带你了解轻量级依赖注入框架Google Guice【享学Java】

GuiceJava领域并不流行(相较于Spring),但因为它轻量级,所以可以作为你去学习理解DI的一个抓手,适合你去进行独立的分析和理解依赖注入的思想,毕竟程序员经常说的:思想都是相通的。...---- Google Guice Google Guice作为一个纯粹的DI框架,主要用于减轻你对工厂的需求以及Java代码对new的使用。...Dog.class); } } 测试类: public class TestGuice { @Inject private Animal animal; //// 官方推荐使用构造注入...,但本类是测试类,为了方便就使用属性注入喽 //// 当然喽,test类必须有空构造器~~~~这就另说了 //@Inject //public TestGuice(Animal animal){...;Guice记录绑定关系,然后在运行时有需要的时候帮你完成注入 ---- 优缺点 Spring 的优缺点此处不做说明,主要描述Guice它的DI领域的优缺点。

4.6K21

Apache Log4j 2远程代码执行漏洞

漏洞描述 Apache Log4j是一个基于Java的日志记录工具。Log4j是几种Java日志框架之一。...该项目Apache接手后进行了代码重构,解决了框架的架构问题并在Log4j 2提供了一个插件架构,这使其更具扩展性。...Log4j 2.X采用了LDAP的简单目录服务结构进行日志的查询。...进行递归查询时,JNDI方法处理查询参数的过程存在注入漏洞,攻击者可利用该漏洞未授权的情况下,构造恶意参数以远程方式目标服务器上执行恶意代码。...(2)入侵排查 攻击者利用前通常采用dnslog方式进行扫描、探测,针对该漏洞利用可通过应用系统报错日志的如下关键字进行排查: 攻击者发送的恶意数据包可能存在“{jndi:rmi”、“{jndi:

65330

Log4j重大漏洞、看看我怎么重现与解决

先来看看官方漏洞描述: Apache Log4j2 是一个基于 Java 的日志记录工具。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。...该日志框架被大量用于业务系统开发,用来记录日志信息。 大多数情况下,开发者可能会将用户输入导致的错误信息写入日志。攻击者利用此特性可通过该漏洞构造特殊的数据请求包,最终触发远程代码执行。...现在我们细思极恐一下,将一个类似 ${jndi:rmi//危险链接} 的字符串往目标程序输入,那是不是就可以受攻击服务器执行。...如果真那样,随便注入一个数据库操作进行数据的修改是不是一下就飞黄腾达,人生巅峰,当然我不建议这样做哈。...,如果他们有打印我们输入的字符串,那么就会中招而在他们的系统执行我自定义的程序。

1.9K30
领券