java - 如何使@autowired 在通用 portlet 中工作(扩展 GenericPortlet)以及如何在没有 Web 上下文的情况下使 spring 工作(创建 bean)
问题描述
我需要在没有 Web 上下文的情况下使 Spring 和 autowired 工作
我的 portlet 的一部分:
@Component (
immediate = true,
property = {
"com.liferay.portlet.display-category=category.sample",
"com.liferay.portlet.instanceable=true",
"javax.portlet.display-name=Main",
"javax.portlet.name=" + MainPortletKeys.Main,
"javax.portlet.security-role-ref=power-user,user"
},
service = Portlet.class
)
public class MainPortlet extends GenericPortlet {
private final DepartmentService departmentService;
private final Validate<Department> departmentValidate;
private final EmployeeService employeeService;
private final Validate<EmployeeDTO> employeeValidate;
@Autowired
public MainPortlet(DepartmentService departmentService, Validate<Department> departmentValidate, EmployeeService employeeService, Validate<EmployeeDTO> employeeValidate) {
this.departmentService = departmentService;
this.departmentValidate = departmentValidate;
this.employeeService = employeeService;
this.employeeValidate = employeeValidate;
}
堆栈跟踪:
2019-04-11 07:36:55.678 WARN [Framework Event Dispatcher: Equinox
Container: 448cb8d9-4aef-46fb-9142-c4d136b7b531][com_aimprosoft:103]
FrameworkEvent WARNING org.osgi.framework.ServiceException:
org.apache.felix.scr.impl.manager.SingleComponentManager.getService()
returned a null service object at
org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.factoryGetServicServiceFactoryUse.java:232)
at
org.eclipse.osgi.internal.serviceregistry.ServiceFactoryUse.getService(ServiceFactoryUse.java:111)
at
org.eclipse.osgi.internal.serviceregistry.ServiceConsumer$2.getService(ServiceConsumer.java:45)
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:524)
at
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:464)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.getService(BundleContextImpl.java:624)
at
com.liferay.portal.osgi.web.portlet.tracker.internal.PortletTracker.addingService(PortletTracker.java:120)
at
com.liferay.portal.osgi.web.portlet.tracker.internal.PortletTracker.addingService(PortletTracker.java:111)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:943)
at
org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1)
at
org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256)
at
org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229)
解决方案
推荐阅读
- html - 不同 CSS 的 z-index 是否可以一起工作?
- saga - 当 Saga Orchestrator 失败时该怎么办?
- arrays - 使用默认构造函数初始化声明的数组
- angular - Angular 10中POST请求的空值
- c - 为什么变量在导入 fs.h 时具有不完整的类型“struct file_operations”?
- excel - 如何通过将NA视为1来将Excel中的NA(文本NA)值与数字相加
- neural-network - 如何在 bert 预训练模型中获得最后一个变压器编码器的所有输出,而不仅仅是 cls 令牌输出?
- javascript - 如何在单击另一个按钮时将动态类添加到多个动态按钮?
- python - 即使发生连接错误,Python 也会继续循环遍历列表
- java - 使用 Flight Recorder 和 JDK Mission Control 计算更多方法