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