(1)分类
参数注入分为两种:
1.作为类的属性注入
这就是spring最典型的注入方式,通过@Autowired和@Resource进行注入
2.作为方法的入参注入
webx中的@Param,@FormData等
[java] view plain copy
- 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.方法参数
请求中所带的参数,可以直接解析后作为方法参数传递进去,否则就必须自己解析,如:
[java] view plain copy
- //传统的写法
- 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中加入
[html] view plain copy
- <services:data-resolver>
- <dr-factories:turbine-rundata-resolver />
- <dr-factories:parameter-resolver />
- <dr-factories:form-resolver />
- </services:data-resolver>
2.turbine-rundata-resolver
也就是说可以注入TurbineRundata相关数据,即请求上下文相关的数据。类型包括
[html] view plain copy
- * <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>
实例:
[java] view plain copy
- 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")
实例:
[java] view plain copy
- void doGetInt(@Param("aaa") int i)
<2>指定参数名称并包含一个默认值 :@Param(name="name",defaultValue="123")
实例:
[java] view plain copy
- void doGetIntDefault(@Param(name = "aaa", defaultValue = "123") Integer i)
<3>指定参数名称并包含一组默认值 :@Param(name="name",defaultValues={"1","2","3"})
实例:
[java] view plain copy
- void doGetIntegerArrayDefault(@Param(name = "aaa", defaultValues = { "123", "456" }) Integer[] i)
@Params用法:
将request parameters中的值放入pojo中
实例:
[java] view plain copy
- void doSetData(@Params MyData data)
4.form-resolver
使得可以使用@FormData等表单相关注解进行参数注入
最后欢迎大家访问我的个人网站:1024s