Java 8 and Spring 4 : Use autowiring in interface

后端 未结 2 1514
心在旅途
心在旅途 2021-02-02 12:14

Java 8 added a new feature by which we can provide method implementation in interfaces. Is there any way in Spring 4 by which we can inject beans in the interface which can be u

相关标签:
2条回答
  • 2021-02-02 12:31

    This is a bit tricky but it works if you need the dependency inside the interface for whatever requirement.

    The idea would be to declare a method that will force the implemented class to provide that dependency you want to autowire.

    The bad side of this approach is that if you want to provide too many dependencies the code won't be pretty since you will need one getter for each dependency.

    public interface TestWiring {
    
       public Service getService();
    
       default void testWiringMethod(){
           getService().testService();
       }
    
    }
    
    
    public class TestClass implements TestWiring {
    
        @Autowire private Service service;
    
        @Override
        public Service getService() {
            return service;
        }
    
    }
    
    0 讨论(0)
  • 2021-02-02 12:47

    You can created Class utils of application context and use it everywhere even not bean class .

    you can have code somethins this :

    public class ApplicationContextUtil implements ApplicationContextAware {
    
        private static ApplicationContext applicationContext;
    
        @Override
        public void setApplicationContext(ApplicationContext context) {
            ApplicationContextUtil.applicationContext = context;
        }
    
        public static ApplicationContext getApplicationContext() {
            return applicationContext;
        }
    
    }
    

    and add this to your spring configuration

    <bean class="com.example.ApplicationContextUtil" id="applicationContextUtil"/>
    

    now simple to use when you need :

    ApplicationContextUtil.getApplicationContext().getBean(SampleBean.class)
    

    this word in web and simple spring app.

    0 讨论(0)
提交回复
热议问题