каква е целта на @Component във фабричните реализации на OSGI?

Опитвам се да внедря servicefactory, използвайки анотации на apache felix scr.

@Component
@Service(serviceFactory = true)
@Properties(value = { @Property(name = "className", value = "interface1") })
public class Tinterfaceimpl1 implements Tinterface {

    @Override
    public void consumeService() {
        System.out.println("tinterfaceimpl1");
    }
}

Кодът по-горе работи добре. Но каква е целта на @Component? Защото се опитвам да го изложа като услуга вместо като компонент и услуга. Ако премахна състоянието на @Component е незадоволено. Наистина ли е задължително фабриката да използва и компонент, и услуга? pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>TinterfaceImpl</groupId>
    <artifactId>TinterfaceImpl</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <sourceDirectory>src</sourceDirectory>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
                <version>2.3.5</version>
                <!-- <configuration>
                    <instructions>
                        <Import-Package>com.java.serviceeg.tinterface.Tinterface</Import-Package>
                    </instructions>
                </configuration> -->
            </plugin>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-scr-plugin</artifactId>
                <version>1.14.0</version>
                <executions>
                    <execution>
                        <id>generate-scr-scrdescriptor</id>
                        <goals>
                            <goal>scr</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        </build>
        <dependencies>
            <!-- Felix SCR annotations -->
            <dependency>
                <groupId>org.apache.felix</groupId>
                <artifactId>org.apache.felix.scr.annotations</artifactId>
                <version>1.9.6</version>
            </dependency>
            <dependency>
                <groupId>org.apache.felix</groupId>
                <artifactId>org.apache.felix.scr</artifactId>
                <version>1.6.0</version>
            </dependency>
            <dependency>
                <groupId>Tinterface</groupId>
                <artifactId>Tinterface</artifactId>
                <version>0.0.1-SNAPSHOT</version>
                <type>bundle</type>
            </dependency>
        </dependencies>
        <packaging>bundle</packaging>

</project>

person Shriram    schedule 09.12.2015    source източник


Отговори (1)


Да, това е задължително. Той декларира вашия клас като компонент според спецификацията на декларативните услуги. Без анотацията @Component това е просто някакъв клас, който се мотае във вашия пакет.

Компонентите може също да бъдат публикувани като услуги, както в този пример. Но компонентите не трябва да бъдат услуги -- вместо това те могат да изложат някакъв външен интерфейс като сървърен сокет или GUI.

person Neil Bartlett    schedule 09.12.2015
comment
Опитвам се да изложа услуга, използвайки ds, която изисква анотация на компонента, в противен случай се проваля и услугата е в незадоволено състояние. Бихте ли, моля, защо се изисква анотация на компонент, когато отивам просто с услуга?. Можете също така да ми предоставите указателя за горното обяснение. - person Shriram; 31.12.2015
comment
Моят отговор обясни защо е необходим @Component. Това, което пишете е едновременно услуга и компонент. - person Neil Bartlett; 31.12.2015
comment
Въпросът ми не беше свързан с горния. Това е просто услуга, която прилагам (с ds). Там очаква анотация на компонента. Без анотацията услугата става неудовлетворена. - person Shriram; 01.01.2016
comment
Това е така, защото се изисква анотация @Component. Не знам повече начини да заявя същото. - person Neil Bartlett; 02.01.2016
comment
Здравейте, мога ли да знам каква е употребата на фабричен атрибут в анотацията @component. - person vijaya kumar; 21.10.2016