Java Spring AOP注入PortletRequest
我正在尝试在我的方面类中注入portletrequestJava Spring AOP注入PortletRequest,java,spring,aop,portlet,aspects,Java,Spring,Aop,Portlet,Aspects,我正在尝试在我的方面类中注入portletrequest @Autowired(required = true) private PortletRequest request; @Before("execution(* de.ac.mis.dao.*.getSessionFactory())") public void setUsername() { System.out.println("Now I'm setting the username " + this.request);
@Autowired(required = true)
private PortletRequest request;
@Before("execution(* de.ac.mis.dao.*.getSessionFactory())")
public void setUsername() {
System.out.println("Now I'm setting the username " + this.request);
}
只给了我一个
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No matching bean of type [javax.portlet.PortletRequest] found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
例外情况
但是我可以自动连线
HttpServletRequest
-我遗漏了什么吗?好的,在一些实验之后解决了它,也许它对其他人有用
@Before("execution(* de.ac.mis.dao.acDynamicUserSessionFactory.getSessionFactory())")
public void setUsername(JoinPoint joinPoint) {
acDynamicUserSessionFactory dao = (acDynamicUserSessionFactory) joinPoint.getTarget();
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
String userName = "";
if (requestAttributes instanceof PortletRequestAttributes) {
PortletRequest request = ((PortletRequestAttributes) requestAttributes).getRequest();
userName = request.getRemoteUser();
} else if (requestAttributes instanceof ServletRequestAttributes) {
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
userName = request.getRemoteUser();
}
dao.setUserName(userName);
this.log.debug("acUserSessionfactory was set for user: " + userName);
}
对于这些配置来说,重要的是请求资源(Portlet或Servlet)必须在spring上下文中运行,否则此时没有可用的requestattributes。好的,在一些实验之后解决了这个问题,也许它对其他人有用
@Before("execution(* de.ac.mis.dao.acDynamicUserSessionFactory.getSessionFactory())")
public void setUsername(JoinPoint joinPoint) {
acDynamicUserSessionFactory dao = (acDynamicUserSessionFactory) joinPoint.getTarget();
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
String userName = "";
if (requestAttributes instanceof PortletRequestAttributes) {
PortletRequest request = ((PortletRequestAttributes) requestAttributes).getRequest();
userName = request.getRemoteUser();
} else if (requestAttributes instanceof ServletRequestAttributes) {
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
userName = request.getRemoteUser();
}
dao.setUserName(userName);
this.log.debug("acUserSessionfactory was set for user: " + userName);
}
对于这些配置,重要的是请求资源(Portlet或Servlet)必须在spring上下文中运行,否则此时没有可用的requestattributes。在查看JavaDocs后,我选择使用resolveReference,它声明: 至少:密钥的HttpServletRequest/PortletRequest引用 “请求”,以及密钥的HttpSession/PortletSession参考 “会议” 示例代码:
RequestAttributes attrs = RequestContextHolder.getRequestAttributes();
// According to JavaDoc, PortletRequest should be available
PortletRequest request = (PortletRequest) attrs.resolveReference("request");
在查看JavaDocs后,我选择使用resolveReference,它声称: 至少:密钥的HttpServletRequest/PortletRequest引用 “请求”,以及密钥的HttpSession/PortletSession参考 “会议” 示例代码:
RequestAttributes attrs = RequestContextHolder.getRequestAttributes();
// According to JavaDoc, PortletRequest should be available
PortletRequest request = (PortletRequest) attrs.resolveReference("request");