【问题标题】:Spring AOP injecting PortletRequestSpring AOP 注入 PortletRequest
【发布时间】:2013-07-17 05:00:57
【问题描述】:

我正在尝试在我的方面类中注入一个 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);
}

只给我一个

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 - 我错过了什么吗?

【问题讨论】:

    标签: java spring aop portlet aspects


    【解决方案1】:

    好的,经过一些实验解决了,也许它对其他人有用

    @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 上下文中运行,否则此时没有可用的请求属性。

    【讨论】:

      【解决方案2】:

      在查看 JavaDocs 后,我选择使用 resolveReference,它声称:

      至少:密钥的 HttpServletRequest/PortletRequest 参考 "request",以及键的 HttpSession/PortletSession 参考 “会话”。

      示例代码:

      RequestAttributes attrs = RequestContextHolder.getRequestAttributes();
      // According to JavaDoc, PortletRequest should be available
      PortletRequest request = (PortletRequest) attrs.resolveReference("request");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-30
        • 1970-01-01
        相关资源
        最近更新 更多