【发布时间】:2019-12-20 16:31:00
【问题描述】:
我正在构建一个 Spring 包,任何 Spring 应用程序都可以使用它来执行会话管理(很像 NodeJS 中的 express-session)。这个库需要接受应用程序的 JPA 配置(例如数据库的 url、用户名、密码和其他额外的数据源属性,就像 express-session 一样),以及其他一些特定于库的属性。我还希望应用程序能够将函数传递给库,如果应用程序希望使用自己的令牌生成函数,库可以调用该函数来生成令牌。
我查看了@Imports,但是,我认为这要求要导入的类位于同一个包中,但情况并非如此,因为应用程序将是与库完全不同的包。有没有办法只使用名称来搜索应用程序配置类?
我知道我可以要求应用程序创建一个 application.properties 文件,然后使用 @EnableAutoConfiguration 来传递这些值,但是当我还想传递一个函数时这会失败。我想一种解决方法是传递一个函数名并使用反射调用它?虽然我不确定这将如何工作,我也不想这样做。
这是我的配置类,应该能够接受应用程序的配置
@Configuration
public class SuperTokensAppConfig {
@Bean
public DataSource dataSource() {
// use the application's datasource here and return it
}
这是一个包含所有必要的库特定属性和函数的接口。应用程序应该能够扩展它,并且我应该能够使用这个接口的名称来自动装配那个 bean(见下文)
public interface SuperTokensAccessKeyConfig {
public String userFunction();
public boolean dynamic;
...
}
这里是使用用户生成函数的服务
@Service
public class AccessTokenKey {
...
@Autowired
private SuperTokensAccessKeyConfig userConfig = null; // this would have the function I need
private String useUserFunction() {
return userConfig.userFunction();
}
}
【问题讨论】:
标签: java spring spring-data-jpa spring-annotations