AEM项目引入StaticDataSourceModel实现类触发重复类错误问题
问题修复方案
核心错误点1:Sling Model实现类冗余添加@Component注解
你在StaticDataSourceModelImpl类上同时加了@Model和@Component两个注解:
@Model是Sling框架用来注册适配模型的专用注解,本身已经完成类的注册逻辑- 额外添加
@Component会让OSGi容器再次把该类作为服务组件注册,两次注册过程触发类重复校验错误 - 解决方法:直接删除
StaticDataSourceModelImpl类上的@Component注解即可。
次要错误点2:接口方法冗余标注@PostConstruct
@PostConstruct是作用于实现类具体方法的生命周期注解,标注在接口方法上属于无效配置,部分AEM版本的类解析器会识别为配置冲突,间接触发类重复报错:
- 解决方法:删除
StaticDataSourceModel接口中init()方法上的@PostConstruct注解,仅保留实现类重写方法上的该注解。
残留问题排查
如果完成上述修改后仍报错,是AEM实例残留旧部署包导致的:
- 停止AEM实例,删除
crx-quickstart/launchpad/felix目录下的所有内容 - 重启AEM后重新部署你的项目包即可。
附加优化建议
你当前init()方法中直接修改@Self注入的SlingHttpServletRequest对象属于无效操作,@Self注入的对象是框架托管的不可变对象,建议把处理后的数据源存到自定义字段中,避免后续使用出现数据异常。
内容的提问来源于stack exchange,提问作者jmona789
相关产品推荐
相关产品推荐

