(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等表单相关注解进行参数注入