带有构造函数参数的Spring依赖注入

时间:2017-09-10 12:40:54

标签: java android spring hibernate sockets

我有用于客户端的spring boot,hibernate应用程序和android应用程序。我也使用java.net.Socket api进行套接字连接。 在我创建像new Server(12346);这样的服务器套接字之前,一切都很好。但现在我需要从套接字类访问数据库,例如使用@Autowired UsersDao字段,但当然是null,因为Spring框架无法看到Socket类。 那么如何使用port作为构造函数参数在Socket类上进行依赖注入,并使UserDao为非null?

1 个答案:

答案 0 :(得分:0)

您可以从静态方法访问Spring Application Context并使用此静态方法在您的Server类中加载您的存储库bean,而不是自动装配它。

您需要创建以下类(找到here):

ApplicationContextProvider

@Component
public class ApplicationContextProvider implements ApplicationContextAware {

    private static ApplicationContext context;

    public ApplicationContext getApplicationContext() {
        return context;
    }

    @Override
    public void setApplicationContext(ApplicationContext ctx) {
        context = ctx;
    }
}

SpringConfiguration

@Configuration
public class SpringConfiguration {

    @Bean
    public static ApplicationContextProvider contextProvider() {
        return new ApplicationContextProvider();
    }

}

然后你的非Spring管理Server课程:

public class Server {
    //your code

    public void doUsersDaoStuff() {
        UsersDao usersDao = (UsersDao) SpringConfiguration.contextProvider().getApplicationContext().getBean("UsersDao");
        // Do your own stuff with UsersDao here...
    }
}