随笔-4  评论-14  文章-0  trackbacks-0
EasyJWeb中提供了一些注解,可以给开发带来很多方便。这些注解包括有数据验证用的@FormPO、@Validator等;IOC注入用的@Inject、@InjectDisable等;action配置用的@Action等。
今天我们来说说action配置时要用的注解@Action,使用这些注解可以大量减少配置文件的编写。
首先,我们来看看不使用这些注解的时候是怎么做的,以一个hello world程序为例。
首先是action:
public class HelloAction extends AbstractCmdAction
{
    
private IHelloService servie;

    
public IHelloService setService(IHelloService service){
        
this.service = service;
    }


    
public Page doHello(WebForm form, Module module){
        System.out.println(service.sayHello());
        
return null;
    }

}

service:
public interface IHelloService{
    String sayHello();
}

service实现:
public class HelloServiceImpl implements IHelloService
{
    
public String sayHello(){
        
return "hello";
    }

}

如果要使这个程序正常运行,我们还需要配置service和action,easyjweb中默认集成spring,service是在spring的配置文件中配置:
    <bean id="helloService"    class="com.hello.service.impl.HelloServiceImpl">
    
</bean>

现在来配置action,在easyjweb的配置文件中这样配置:
        <module name="hello" path="/hello" form="" scope="request"
            action
="com.hello.mvc.HelloAction" defaultPage="list"
            inject
="byType">

        
</module>
这里说说这个inject="byType",这样配置之后在HelloAction中的属性会自动根据类型来注入。inject还有byName等属性,意思就是根据名字来注入。如果这里不加这个inject,那么配置文件就应该是这样写:
        <module name="hello" path="/hello" form="" scope="request"
            action
="com.hello.mvc.HelloAction" defaultPage="list"
            inject
="byType">
     
<property name="service" ref="helloService" />
        
</module>
property的name属性对应HelloAction中的service,名字要保持一致。ref对应上面在spring中配置的helloService的id。
到这里,这个程序就可以运行了。
一个简单的hello程序就用了这么多配置文件,这让人难以忍受。现在我们就来说说怎么使用EasyJWeb的注解来简化配置。
我们修改一下HelloAction的代码,给这个类加上一个@Action注解:
@Action(path="hello")
public class HelloAction extends AbstractCmdAction
{
    
private IHelloService servie;

    
public IHelloService setService(IHelloService service){
        
this.service = service;
    }


    
public Page doHello(WebForm form, Module module){
        System.out.println(service.sayHello());
        
return null;
    }

}

这样一来,我们就不需要easyjweb中配置的module了,当使用hello.ejf访问的时候框架会自动把请求交给HelloAction处理。
现在来简单介绍一下@Action这个注解。
@Action的各个属性说明如下:
name用来指Action的名称,也是在容器中的Bean名称,我们一般不使用这个属性。
path用来指定模块的path值,也即所映射的url,如果不设值该值将会按照缺省的方式处理。
alias用来指定这个模块的path别名,也就是可以使用其它的一个或多个名称来访问这个模块。
inject用来指定Action中所有业务组件注入方式,默认值为按类型注入。如果为byName则表示按名称注入,auto表示自动按名称或类别注入,none则表示不注入。
disInject用来标识不自动注入的属性。
autoInject用来标识允许自动注入的属性。
autoToken表示该模块是否需要开取自动防重复提交功能;
validate表示该模块是否开取自动验证功能,默认情况不开启自动验证;
view表示该模板的视图存放子目录。
scope用来指定这个Action在容器中的创建方式及生命周期,默认值为request,表示每次请求创建一次该对象,若为session则表示个用户会话创建一个对象,若为singleton表示整个容器中只创建一次该实例。
messageResource表示多国语言属性文件的存放子目录。
通常我们只用到path、view、inject这几个属性,由于inject的默认值为"AutoJnjectByType",是最常用的,因此通常也不需要显式指定这个属性值。而disInject是用来标识不允许注入的属性的,当我们的action出现了一些不需要注入的属性时,如logger,我们就需要使用这个属性来指定哪些是不需要注入的。autoToken则是标识是否开启防重复提交功能的。

posted on 2007-12-28 13:36 天 一 阅读(1185) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: