OSGi 개념을 다룰 때 CQ5를 처음 접했을 때 서비스라는 것을 발견했습니다. 메서드 및 메서드를 재정의하는 인터페이스 및 구현 클래스가있는 번들을 만들었습니다 (단순히 "hello world"라는 문자열을 반환합니다). jsp/some java 클래스에서 해당 클래스를 활용하려면 해당 인스턴스를 새로 만듭니다. 개체 및 해당 메서드를 사용합니다. 그래서 내 질문은 새로운 개체 및 서비스를 만드는 사이의 정확한 차이점은 무엇입니까. 그리고 새로운 객체에 대한 서비스의 이점에 대해 언급하십시오. 또한 Spring-DM을 사용하여 서비스를 구성하는 데 도움이됩니다.OSGi에서 서비스 활용과 새로운 객체 생성의 차이
답변
구성 요소와 서비스의 주요 차이점은 OSGi가 수명주기를 관리한다는 것입니다. 즉, 해당 상태는 구성 요소를 사용하는 클래스와 독립적입니다.
OSGi 서비스에는 정보가 저장되거나 메시지에 응답하는 데 사용할 수있는 상태가 있으며 OSGi 서비스를 사용하는 클래스의 범위를 벗어나지 않습니다. 인터페이스를 통해 실제 구현과 인터페이스를 분리 할 수도 있습니다. 실행중인 인스턴스 (IE, 공급자를 v1에서 v1.0.1로 업그레이드)에서 특정 서비스의 구현을 쉽게 바꿀 수 있습니다. 또한 응용 프로그램을 종료하지 않고 구성 요소를 일시적으로 중지하고자 할 수 있습니다. 서비스가 활성화되면 다시 배선됩니다.
각각의 기본 사용 사례는 기능에 대한 것입니다. 클래스가 일부 getter 및 setter가있는 bean 인 경우 인스턴스를 만들고 채우고 필요할 때마다 사용합니다. 반면에, 클래스가 일종의 기능 (처리, 저장, 큐잉 등)을 제공한다면. 그것은 아마도 서비스가되어야합니다. 많은 정적 메서드 (헬퍼, 관리자)를 가진 클래스는 일반적으로 매우 쉽게 서비스로 리팩토링 될 수 있습니다.
spring-dm에 대해 확실하지 않습니다. 하지만 Adobe CQ5에서는 일반적으로 선언적 서비스에 Felix annotations을 사용합니다.
안녕하세요 santiagozky, 답장을 보내 주셔서 감사합니다. 유스 케이스와 예제를 사용하여 이것을 설명 할 수 있습니까 (서비스 대 새로운 객체 인스턴스) 또는 이에 관한 정보를 얻을 수있는 링크를 제공 할 수 있습니까? – user2784095
나는 대답을 편집했다. 충분히 명확한가요? – santiagozky
@santiagozky의 위대한 답변 외에도 다른 주요 차이점은 종속성 관리라고 덧붙입니다.
개체를 인스턴스화하면 모든 종속성이 상속됩니다. 이러한 종속성을 변경할 수있는 구현의 변경 사항에 언제나 귀결됩니다. 서비스를 이용할 때 인터페이스에 코딩하는 Java의 우수 사례를 따르고 있습니다. 귀하의 코드는 구현에 의존하지 않으며 인터페이스 종속성에만 의존합니다. 이는 항상 구현과 같거나 그보다 작습니다. 일반적으로 훨씬 적은 수의 종속성 집합입니다. 기존 구현을 수정하거나 구현을 모두 변경해도 코드에는 아무런 영향이 없습니다.
귀하의 질문은 다음과 같습니다 : http://stackoverflow.com/questions/20323063/why-should-one-create-use-services-in-osgi/20323288#20323288. Spring-DM 질문에 대해서는 Spring-DM 사이트를 살펴보십시오.하지만 더 이상 지원되지 않기 때문에 아마 갈 수있는 최선의 방법은 아닙니다. –