Java 当@Reference成功时,将@Inject NullPointerError挂起

Java 当@Reference成功时,将@Inject NullPointerError挂起,java,osgi,aem,inject,sling,Java,Osgi,Aem,Inject,Sling,尝试@Inject(javax.Inject.Inject)时在AEM OSGi容器中使用Mavenorg.apache.felix.Maven scr插件作为构建过程的一部分,在MyConfigurationService中注入MyConfigurationService会导致NullPointerError的任何操作 服务实施: @Service({MyConfigurationService.class}) @Component(immediate = true, metatype = t

尝试
@Inject
(javax.Inject.Inject)时在AEM OSGi容器中使用Maven
org.apache.felix.Maven scr插件作为构建过程的一部分,在
MyConfigurationService
中注入
MyConfigurationService
会导致
NullPointerError
的任何操作

服务实施:

@Service({MyConfigurationService.class})
@Component(immediate = true, metatype = true, label = "My Configuration Service")
public class MyConfigurationServiceImpl implements MyConfigurationService {
    @Property(unbounded = PropertyUnbounded.DEFAULT, label = "API URL", description = "API URL")
    private static final String API_URL = "apiurl";

    private String apiUrl;

    @Activate
    protected void activate(Map<String, Object> properties) {
        this.apiUrl = PropertiesUtil.toString(properties.get(API_URL), "");
    }
}
@SlingServlet(paths = "/bin/myServlet", methods = "POST", metatype = true)
public class MyServlet extends org.apache.sling.api.servlets.SlingAllMethodsServlet {
    private static final long serialVersionUID = 1L;
    private static final Logger logger = LoggerFactory.getLogger(MyServlet.class);

    @Inject
    MyConfigurationService myConfigurationService;

    @Override
    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response) throws ServerException, IOException {
        // any attempts to use myConfigurationService results in NPE
    }
}
但是,使用
@Reference
(org.apache.felix.scr.annotations.Reference)代替
@Inject
成功注入服务,并可在
@SlingServlet
方法中使用,例如
doPost

@Reference
MyConfigurationService myConfigurationService;
@Reference
工作时,为什么
@Inject
无法将服务注入
@SlingServlet


谢谢你能提供的任何帮助

我认为您混淆了sling models@Inject和maven SCR插件使用的SCR注释

maven SCR插件定义了在
构建时处理的注释,这些注释定义如下:
所有这些注释都在包
org.apache.felix.scr.annotations

@Reference注释只能与@Component、@service、@SlingServlte或定义OSGI组件的任何其他SCR类注释一起使用


javax.inject.inject
注释是通用的,被许多框架用于依赖项注入。在AEM或Sling的例子中,它只意味着Sling模型内部的某些东西(由
org.apache.Sling.models.annotations.Model注释的类)
,请阅读有关@Inject和可以在Sling模型中使用的其他注释的更多信息:

因此
@Inject
是真正只在@Model注释元素中使用的东西,虽然
@Reference
将在
@Service
中使用,
@Component
或类似的注释元素来有效地完成依赖注入?