복붙노트

[SPRING] OSGi 번들 내에서 Spring 빈을 어떻게 사용합니까?

SPRING

OSGi 번들 내에서 Spring 빈을 어떻게 사용합니까?

Spring을 사용하여 OSGi 번들 내부의 일부 비즈니스 조건을 기반으로 Bean을로드해야하는 애플리케이션이 있습니다. 이 bean은 내보내기를위한 것이 아니며 내 번들에서 계산에 사용됩니다. 기본적으로 나는 내재 된 실제 서비스 컴포넌트를 가지고 있으며 내부적으로이 Spring bean을 사용해야한다. 그러나...

이 일을 할 수있는 방법이 있습니까?

해결법

  1. ==============================

    1.성취하고자하는 일에 대해 봄 DM은 필요하지 않습니다.

    성취하고자하는 일에 대해 봄 DM은 필요하지 않습니다.

    당신이 원하는 것은 실제로 번들 내부의 컨텍스트에 대한 액세스를 제공하고 ctx.getBean ()을 통해 클래스가 조회를 수행하는 것입니다. 이 경우, OSGi에 있지 않은 것처럼 수동으로 번들에 컨텍스트를 작성하고 호출하십시오. 봄 DM이 전혀 관여하지 않았습니다.

    여기서 하나의 문제는 클래스 문맥 클래스 로더를 다르게 사용하기 때문에 번들 클래스 로더를 제공하기 위해 ClassPathXmlApplicationContext를 확장해야한다는 것입니다.

    ApplicationContext ctx = new ClassPathXmlApplicationContext(myCtxPath)
    {
        protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader)
        {
            super.initBeanDefinitionReader(reader);
            reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE);
            reader.setBeanClassLoader(getClassLoader());
        }
    }
    
  2. from https://stackoverflow.com/questions/8039931/how-do-i-use-a-spring-bean-inside-an-osgi-bundle by cc-by-sa and MIT license