java - 如何在没有自动装配的情况下实例化spring数据jpa存储库
问题描述
我的存储库界面为
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface MyRepository extends JpaRepository<Tokens, Long>{
}
并且我想在上面的存储库中使用的服务 impl 文件不是 @Component 或 @Service,因为它的对象是使用 new 创建的。所以它不允许在我的服务 impl 类中自动装配或注入存储库。
在这种情况下还有其他方法可以实施吗?
解决方案
有几个选项可用。
首先,您可以将其用作普通依赖项并使用工厂 bean 来实例化您的对象。
@Component
public class MyFactoryBean {
private Repository repository;
@Autowired
public MyFactoryBean(Repository repository) {
this.repository = repository;
}
public Instance getInstance(Parameter parameter) {
return new Instance(repository, parameter);
}
}
如果你parameter
在运行时没有改变,你可以在你的配置中提供一个 bean:
@Configuration
public class MyConfiguration {
private Repository repository;
@Autowired
public MyConfiguration(Repository repository) {
this.repository = repository;
}
@Bean
public Instance instance(){
Parameter parameter = ... // value in a config file or static value
return new Instance(repository, parameter);
}
}
此外,您可以AutowireCapableBeanFactory
像往常一样使用 为不受 Spring 管理的对象注入依赖项。请记住,您需要使用严格的 setter 注入。
private AutowireCapableBeanFactory beanFactory;
@Autowired
public MyFactoryBean(AutowireCapableBeanFactory beanFactory) {
this.beanFactory = beanFactory;
}
public void doStuff() {
MyService service = new MyService();
beanFactory.autowireBean(service); // dependencies will be autowired
}
推荐阅读
- python-3.x - 仅当其他列中存在值时才将数据框复制到列
- python - 如何等待带有事件循环的协程
- .net - 将 .NetCore 3.1 更改为 .NetFramework4.7
- python - 将csv文件中的一整列更改为Python中的序号
- android - 如何删除GridView内LinearLayout中的空白?
- php - 注意:尝试访问 bool 类型值的数组偏移量
- data-binding - 如何使用敲除绑定下拉列表中的数据
- c# - 在后台计算 raycasts(linecast) 以节省性能 Unity c#
- excel - Power Query - 单元格以当前行单元格文本开头的所有行的计数
- python - 我怎样才能在for循环中只打印一次