Spring架构增强MultiActionController(3)

我们可以在MultiActionController中定义一个PropertiesMethodNameResolver类型的成员变量“propertiesMethodNameResoler”。和定义一个Properties类型的成员变量“urlMethodmappings”在MultiActionController的bean进行配置的时候把urlMethodmappings的值作为propertiesMethodNameResoler的mapping的值。然后再调用MultiActionController的setMethodNameResolver()方法,把propertiesMethodNameResoler设置为MultiActionController的methodNameResolver的属性值。要做到这一些还应该实现InitializingBean接口。






public class MultiMethodController extends MultiActionController implements
InitializingBean ...{

private Properties urlMethodmappings;
public void afterPropertiesSet() throws Exception ...{
if (urlMethodmappings != null && !urlMethodmappings.isEmpty()) ...{

PropertiesMethodNameResolver propertiesMethodNameResolver
= new PropertiesMethodNameResolver();
propertiesMethodNameResolver.setMappings(urlMethodmappings);
this.setMethodNameResolver(propertiesMethodNameResolver);
if (this.logger.isInfoEnabled()) ...{
this.logger.info("binding success...... ");
}
} else ...{
logger.info("no 'urlMethodmappings' set on MultiMethodController");
}
}
/**//**
* @return Returns the urlMethodmappings.
*/
public Properties getUrlMethodmappings() ...{
return urlMethodmappings;
}

/**//**
* @param urlMethodmappings
* The urlMethodmappings to set.
*/
public void setUrlMethodmappings(Properties urlMethodmappings) ...{
this.urlMethodmappings = urlMethodmappings;
}
}


在afterPropertiesSet中,






PropertiesMethodNameResolver propertiesMethodNameResolver
= new PropertiesMethodNameResolver();


创建一个默认的PropertiesMethodNameResolver的实例






propertiesMethodNameResolver.setMappings(urlMethodmappings);


把urlMethodmappings作为propertiesMethodNameResolver的mapping属性值






this.setMethodNameResolver(propertiesMethodNameResolver);


调用父类方法,把propertiesMethodNameResolver注入MethodNameResolver属性中。


注意,在这里我命名为MultiMethodController是为了与MultiActionController区别。

通过这样的代码,简化了原本复杂的配置。


4.2通过一个commandName属性,可以让用户自由决定绑定对象的名称


MultiActionController的getCommandName如下:






public static final String DEFAULT_COMMAND_NAME = "command";
protected String getCommandName(Object command) ...{
return DEFAULT_COMMAND_NAME;
}


MultiActionController并没有一个setCommandName的方法,所以我们需要一个setCommandName的方法,然后重写getCommandName(Object command)方法






private String commandName =DEFAULT_COMMAND_NAME;
public String getCommandName() ...{
return commandName;
}
public void setCommandName(String commandName) ...{
this.commandName = commandName;
}
protected String getCommandName(Object object) ...{
return this.getCommandName();
}


如果没有设置commandName属性,默认值为“command”,通过setCommandName方法就可以自由的去决定comamnd对象的名称了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值