webx参数注入

(1)分类

              参数注入分为两种:

              1.作为类的属性注入

                  这就是spring最典型的注入方式,通过@Autowired和@Resource进行注入

              2.作为方法的入参注入

                  webx中的@Param,@FormData等

public class LoginAction {

    @Autowired
    private LoginService loginService; // 一般性注入

    @Autowired
    private HttpSession session;      // 特殊注入

    public void doLogin(@Param("name") String name, @Param("password") String password,
                        @Param("return") String returnURI, Context context, Navigator navigator) {// 参数注入

        if (loginService.login(name, password)) {
            session.setAttribute(Constant.SESSION_KEY, "true");
            navigator.redirectToLocation(returnURI);
        } else {
            context.put("message", "用户名、密码错误!");
        }
    }
}

(2)注入内容

              1.一般类实例

                  如上面的LoginService是我们自定义的,可以直接注入。这与一般的spring依赖注入完全一致

              2.特殊实例

                  如HttpSession、HttpServletRequest等特殊实例,webx进行了处理,可以直接注入到类中

          3.方法参数

             请求中所带的参数,可以直接解析后作为方法参数传递进去,否则就必须自己解析,如:

//传统的写法
public void execute(Rundata rundata, Context context) {
        String name = rundata.getParameters().getString("name");
        context.put("name", name);
}
//使用参数注入之后的写法
public void execute(@Param("name") String name, Context context) {
        context.put("name", name);
 }

(3)注入配置

          1.总体配置

             直接在webx-component-and-root.xml中加入

    <services:data-resolver>
        <dr-factories:turbine-rundata-resolver />
        <dr-factories:parameter-resolver />
        <dr-factories:form-resolver />
    </services:data-resolver>

          2.turbine-rundata-resolver

             也就是说可以注入TurbineRundata相关数据,即请求上下文相关的数据。类型包括

 * <ul>
 * <li>TurbineRunData</li>
 * <li>HttpServletRequest</li>
 * <li>HttpServletResponse</li>
 * <li>HttpSession</li>
 * <li>ServletContext</li>
 * <li>ParameterParser</li>
 * <li>CookieParser</li>
 * <li>Context</li>
 * <li>RequestContext及其子类</li>
 * <li>Context中的值,需要指定<code>@ContextValue("name")</code>注解。</li>
 * </ul>

             实例:

void doGetRundata(TurbineRunData rundata)
void doGetNavigator(Navigator nav)
void doGetContext(Context context)
void doGetRequestContext(RequestContext requestContext)

          3.parameter-resolver

             使得可以使用@Param、@Params注解注入参数

             @Param用法:

             <1>仅指定参数名称 :@Param("name")

                    实例:

void doGetInt(@Param("aaa") int i)

             <2>指定参数名称并包含一个默认值 :@Param(name="name",defaultValue="123")

                    实例:

void doGetIntDefault(@Param(name = "aaa", defaultValue = "123") Integer i)

             <3>指定参数名称并包含一组默认值 :@Param(name="name",defaultValues={"1","2","3"})

                    实例:

void doGetIntegerArrayDefault(@Param(name = "aaa", defaultValues = { "123", "456" }) Integer[] i)

              @Params用法:

             将request parameters中的值放入pojo中

                    实例:

void doSetData(@Params MyData data)

          4.form-resolver

             使得可以使用@FormData等表单相关注解进行参数注入



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值