Using CDI in a singleton pattern

前端 未结 2 868
时光说笑
时光说笑 2021-02-05 14:11

I\'m trying to inject a logger object in a class that is implemented following a singleton approach.

The code almost looks like this:

Logger class:<

2条回答
  •  醉话见心
    2021-02-05 14:48

    Injections happens after construct. So you cant use it in the constructor.

    One way is to add a method annotated @PostConstruct that can will be invoked after injections.

    @PostConstruct
    public void init() {
        logger.info("Creating one and only one instance here!");
    }
    

    On a sidenote i Think you are aprouching the problem in the wrong way. CDI has a nice singleton support

    create a class annotated @Singleton

    @Singleton
    public class MySingleton {
    
        @Inject
        Logger logger;
    
        @PostConstruct
        public void init() {
            logger.info("Creating one and only one instance here!");
        }
    
    }
    

    Above assumes you are using CDI for java ee (JSR-299).

    If you are using JSR 330 Dependency Injection (guice etc.) link

    You could use constructor injection:

    @Singleton
    public class MySingleton {
    
    
        private final Logger logger;
    
        @Inject
        public MySingleton (Logger logger) {
            this.logger = logger;
            logger.info("Creating one and only one instance here!");
        }
    }
    

提交回复
热议问题