나는 교육 목적으로 Spring을 스칼라 프로젝트에 추가하려고합니다. 그러나 스프링 스칼라가 컴포넌트를 분리하는 이점을 이해하지 못합니다.스프링 스칼라를 사용하여 디커플링하는 방법은 무엇입니까?
import org.springframework.scala.context.function.FunctionalConfiguration
class Configuration extends FunctionalConfiguration {
bean() {
new Service()
}
}
간단한 서비스 :
import org.springframework.scala.context.function.FunctionalConfigApplicationContext
object Application extends App {
implicit val context = FunctionalConfigApplicationContext(classOf[Configuration])
val service = context.getBean(classOf[Service])
println(service.method)
}
이 그냥 내 해석이다 : 모두가 사용하는
class Service {
def method = "Bonjour tout le monde!"
}
다음 응용 프로그램
나는 간단한 구성을 만들었습니다 스프링 스칼라 예제의 구현.
내 응용 프로그램에는 여전히 Service 클래스에 대한 지식이 있습니다. 나는 다음과 같이 쓸 수있다 :
val service = new Service() // instead of asking for a Bean which has classname Service
println(service.method)
같은 효과.
내가 누락 된 항목이 있습니까?
bean ("sophisticatedService") {...}이 가능하고 Bean을 텍스트로 정의한 다음 context.getBean ("sophisticatedService")을 사용하는 경우이를 이해하고 변경하려고 시도했습니다. 이후 이제는 텍스트 이름으로 분리됩니다. – springScala
나를 위해 Spring에서 실제로 해결 한 유일한 문제는 주기적 종속성이었습니다. 하지만 난 (null을 피하기 위해) 게으른 vals로 이동하고 생성자 내부에서 이름으로 주입 된 매개 변수를 전달합니다. 따라서 스프링 IoC를 더 이상 사용하지 마십시오. 어떤 사람들은'@ Autowired'를 좋아하지만, 그 특성을 사용할 수 있습니다 (특성 내부의 의존성을 정의하고이 의존성이 이미 정의 된 일부 상황과 섞어서 사용합니다) - '케이크 패턴'을 검색하여 더 많은 것을보세요 – dk14
케이스에 스프링을 사용할 수 있습니다 당신은 서비스를위한 인터페이스와 두 개의 구현을 가지고있다. 예를 들어, 애플리케이션은 UserRepository에 의존 할 것이다. FileUserRepository 구현을 할 수 있으며 응용 프로그램에서 해당 세부 사항을 완전히 분리 할 수 있습니다.나중에 DatabaseUserRepository를 구현하고 코드를 건드리지 않고 구현을 전환 할 수 있습니다. 테스트를 위해 모의을 사용하고 UserRepository에 의존하는 코드는 그대로 사용할 수 있습니다. – chalimartines