kotlin springboot使用函数声明两个bean,其中一个依赖另一个为入参
时间: 2024-05-05 22:16:03 浏览: 72
springboot 使用上下文获取bean
下面是一个示例代码,其中有两个bean,其中一个依赖另一个作为入参:
```kotlin
@Configuration
class MyConfiguration {
@Bean
fun myRepository(): MyRepository {
return MyRepositoryImpl()
}
@Bean
fun myService(repository: MyRepository): MyService {
return MyServiceImpl(repository)
}
}
interface MyRepository {
fun getData(): String
}
class MyRepositoryImpl : MyRepository {
override fun getData(): String {
return "Hello World"
}
}
interface MyService {
fun processData(): String
}
class MyServiceImpl(val repository: MyRepository) : MyService {
override fun processData(): String {
return repository.getData()
}
}
```
在上面的代码中,`MyRepository`是一个接口,`MyRepositoryImpl`是它的一个实现类。`MyService`也是一个接口,`MyServiceImpl`是它的一个实现类,它依赖`MyRepository`作为构造函数的入参。
在`MyConfiguration`类中,我们使用`@Bean`注解来声明了这两个bean。`myRepository()`方法声明了一个`MyRepository`类型的bean,它返回一个`MyRepositoryImpl`实例。`myService(repository: MyRepository)`方法声明了一个`MyService`类型的bean,它依赖一个`MyRepository`类型的参数,我们可以看到这个参数是从`myRepository()`方法返回的bean中获取的。
在这样的配置下,我们可以在其他类中使用`@Autowired`注解来注入这两个bean,如下所示:
```kotlin
@Service
class MyOtherService {
@Autowired
lateinit var repository: MyRepository
@Autowired
lateinit var service: MyService
// ...
}
```
在上面的代码中,我们使用`@Autowired`注解来注入`MyRepository`和`MyService`类型的bean。这样,我们就可以在`MyOtherService`类中使用`repository`和`service`对象来访问它们的方法了。
阅读全文