我的存储库界面为
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface MyRepository extends JpaRepository<Tokens, Long>{
}
并且我要在上面的存储库中使用的服务隐含文件不是 @Component或@Service,因为其对象是使用new创建的。因此,不允许在我的服务impl类中自动装配或注入存储库。
在这种情况下,还有其他方法可以实现吗?
答案 0 :(得分:1)
有两个可用选项。
首先,您可以将其用作常规依赖项,并使用工厂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);
}
}
此外,对于非Spring管理的对象,您可以使用AutowireCapableBeanFactory
正常注入依赖项。请记住,您需要使用强壮的二传手注射。
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
}