我试图使用OSGi R6注释创建一个OSGi Service,然后将其注入Sling Model类中,如下所示:
package com.aem.sites.models;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.models.annotations.Model;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.aem.sites.services.WeatherService;
@Model(adaptables=Resource.class)
public class Banner {
final static Logger logger = LoggerFactory.getLogger(Banner.class);
@Inject
private WeatherService weatherService;
private String message;
@PostConstruct
public void init() {
logger.info("##############################################################calling the init method");
message = weatherService.getName();
}
public String getMessage() {
logger.info("##############################################################inside the get message method");
return message;
}
}
OSGi配置界面如下所示:
package com.aem.sites.interfaces;
import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.AttributeType;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
@ObjectClassDefinition(name = "Configuration", description = "Configuration file")
public @interface Configuration {
@AttributeDefinition(
name = "String Property",
description = "Sample String property",
type = AttributeType.STRING
)
public String getText() default "It's a test";
}
服务类如下所示:
package com.aem.sites.services.impl;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import org.osgi.service.component.annotations.Modified;
import org.osgi.service.component.annotations.ConfigurationPolicy;
import org.osgi.service.metatype.annotations.Designate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.aem.sites.interfaces.Configuration;
import com.aem.sites.services.WeatherService;
@Component(service=WeatherService.class,
immediate=true,
configurationPid = "com.aem.sites.services.impl.WeatherServiceImpl",
configurationPolicy=ConfigurationPolicy.REQUIRE
)
@Designate(ocd = Configuration.class)
public class WeatherServiceImpl implements WeatherService{
final static Logger logger =LoggerFactory.getLogger(WeatherServiceImpl.class);
private Configuration config;
private String name;
@Activate
@Modified
protected final void activate(Configuration configuration) {
logger.info("##############################################################calling activate method inside the weather service impl class");
this.config = configuration;
name = config.getText();
}
@Deactivate
protected void deactivate() {
}
@Override
public String getName() {
logger.info("##############################################################calling get name method inside the weather service impl class");
return name;
}
}
最后是服务接口:
package com.aem.sites.services;
public interface WeatherService {
public String getName();
}
我试图在HTL类中使用吊索模型Pojo,如下所示:
<sly data-sly-use.banner="com.aem.sites.models.Banner">
<div class="inner">
<h2>${banner.message}</h2
</div>
</sly>
添加Maven依赖项:
亲本pom。xml
<!-- <plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.5.3</version>
</plugin> -->
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.3.0</version>
<inherited>true</inherited>
</plugin>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
<version>1.3.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.annotation</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.metatype.annotations</artifactId>
<version>1.3.0</version>
</dependency>
核心聚甲醛。xml
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.annotation</artifactId>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.metatype.annotations</artifactId>
</dependency>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>com.aem.site.aem-site</Bundle-SymbolicName>
<Sling-Model-Packages>
com.aem.sites.models
</Sling-Model-Packages>
<Import-Package>javax.inject;version=0.0.0,*</Import-Package>
</instructions>
</configuration>
</plugin>
为了使吊索型号可用,您必须正确配置
您可以使用Sling models Web控制台检查模型是否正确暴露:http://localhost:4502/system/console/status-滑动模型
在服务impl中,你把service=WeatherServiceImpl.class
这是不正确的,它应该是服务接口名称。
所以,在天气服务中
@Component(service=WeatherServiceImpl.class,
到
@Component(service=WeatherService.class,
...
编辑:同时configurationPolicy=configurationPolicy。REQUIRE
表示至少应有一个配置,以便DS组件处于活动状态。(来自代码的配置不起作用)
因此,您可以转到system/system/console/configMgr/com。aem。地点。服务。impl。WeatherServiceImpl并输入值并保存。或者,您可以将configurationPolicy设置为optional,您的代码将在没有config的情况下工作。
问题内容: 我想从源HTML中删除这些标签及其内容。 问题答案: 当搜索你基本上使用的地方被定义这个API。但是,注释并不是技术上的元素,因此您可能会感到困惑,但它们仍然是由节点名标识的节点。 让我们看看这可能如何工作:
我有一把刀: 问题是,当我试图使用DAO进行加载调用时,使用DynamoDBMapper以field d1作为哈希键来获取项目,它会抛出一个DynamoDBExc0019,说:为公共DAO. getField2()找到了空键,但实际上表的值对应于field d2。问题,这是因为Lombok注释而不是手动突变代码,还是一般来说我们一起使用Lombok和DynamoDBAnnotions?
模板注释支持单行注释,多行注释,模板被模板引擎解析不会在页面中输出这些注释,只有开发者可以看到,所以一些不想让用户看到的注释可以使用模板注释。 单行注释 {//单行注释方式一} {/*单行注释方式二*/} 多行注释 {/* 这里多行注释 这里多行注释 这里多行注释 */} 注:{和注释标记(//,/*)之间不能有空格。
js注释: <script> /* js注释*/ </script> css注释 <style> /*css注释*/ </style> html注释 <div> <!--html注释--> </div> php标签里的注释 <php> /*一定要用这个方法,用//会在debug关时出问题*/ </php>
模板注释支持单行注释,多行注释,模板被模板引擎解析不会在页面中输出这些注释,只有开发者可以看到,所以一些不想让用户看到的注释可以使用模板注释。 单行注释 {//单行注释方式一} {/*单行注释方式二*/} 多行注释 {/* 这里多行注释 这里多行注释 这里多行注释 */} 注:{和注释标记(//,/*)之间不能有空格。
模板支持注释功能,该注释文字在最终页面不会显示,仅供模板制作人员参考和识别。 单行注释 格式: {/* 注释内容 */ } 或 {// 注释内容 } 例如: {// 这是模板注释内容 } 注意{和注释标记之间不能有空格。 多行注释 支持多行注释,例如: {/* 这是模板 注释内容*/ } 模板注释支持多行,模板注释在生成编译缓存文件后会自动删除,这一点和Html的注释不同。