`
Anatorian
  • 浏览: 62162 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

通过Annotation和Struts2的interceptor实现向Action中注入jndi资源

    博客分类:
  • jndi
阅读更多

为了实现向struts2的Action中注入ejb3,我写了一个Annotation用来定义要注入哪个ejb3,又写了一个struts2的interceptor用来实施注入。Annotation代码如下:

@Retention(value=RetentionPolicy.RUNTIME)
@Target(value={ElementType.METHOD})
@Inherited
public @interface JndiLookup {
    String jndi();
    Class type();
}

Interceptor代码如下:

public class JndiLookupInterceptor implements Interceptor {
 
    private InitialContext contaxt;
 
    public void destroy() {
        ;
    }
 
    public void init() {
        try {
            contaxt = new InitialContext();
        } catch (NamingException e) {
            e.printStackTrace();
        }
    }
 
    public String intercept(ActionInvocation invocation) 
            throws Exception {
        Method[] methods = invocation.getAction()
      .getClass().getMethods();
        for(Method method : methods) {
            try{
                Class[] parameterTypes 
        = method.getParameterTypes();
                if(parameterTypes.length != 1) {
                    continue;
                }
 
                JndiLookup jndiLookup 
        = method.getAnnotation(JndiLookup.class);
                if(jndiLookup == null) {
                    continue;
                }
                if(jndiLookup.jndi() == null 
            || jndiLookup.jndi().length() == 0) {
                    continue;
                }
                if(jndiLookup.type() == null) {
                    continue;
                }
 
                Object object = this.contaxt.lookup(jndiLookup.jndi());
                method.invoke(invocation.getAction(),
        new Object[] {jndiLookup.type().cast(object)});
            } catch (Exception e) {
                e.printStackTrace();
                ;
            }
 
        }
 
        return invocation.invoke();
    }
 
}

需要被注入的Action代码如下:

public class SomeAction {
    private DataSource ds;
 
    @JndiLookup(jndi="jdbc/mysqlDS", type=DataSource.class)
    public void setDs(DataSource ds) {
        this.ds = ds;
    }
 
    public String execute() {
        //do something about the ds
    }
}

经测试,在tomcat下注入DataSource成功了。看来Annotation和Struts2真的是个好东西呀!

分享到:
评论
1 楼 evonli 2008-04-18  
d                

相关推荐

    struts2 interceptor annotation plugin

    在Struts2中,通过在Action类或方法上使用特定的注解,可以方便地声明和配置拦截器。 例如,`@SkipValidation`注解可以用于跳过某个Action方法的数据验证,`@Action`注解则可以用来定义Action的基本属性,如结果...

    Struts2之Annotation注解配置使用案例struts013

    在Struts2中,Annotation注解的引入为开发者提供了更加灵活和便捷的配置方式,使得无需在XML配置文件中进行繁琐的设置,可以直接在类或方法上通过注解来进行配置。本文将深入探讨Struts2中的Annotation配置,以及...

    struts2 使用Annotation 配置的小例子

    在Struts2中,Annotation允许开发者无需XML配置文件就能定义Action、结果类型、拦截器等。 在"struts2 使用Annotation 配置的小例子"中,我们可能会看到以下几个核心的Annotation: 1. `@Action`: 这个Annotation...

    struts2 hibernate3 spring2.5 annotation 整合

    Spring的ApplicationContext会初始化所有依赖的对象,包括Struts2的Action和Hibernate的SessionFactory,然后注入到需要这些服务的类中。这样,开发者不需要在Action或DAO中手动创建这些对象,而是由Spring自动提供...

    struts2-Annotation

    在Struts2中,开发者可以使用注解来声明动作(Action)、结果(Result)和拦截器(Interceptor)等。 2. **Struts2中的主要注解**: - `@Action`: 这个注解用于标记一个Java类作为Struts2的动作类,它定义了请求...

    struts2利用注解annotation实现文件下载

    ### Struts2 使用注解(Annotation)实现文件下载 在Web开发中,文件上传与下载是常见的需求之一。Struts2框架提供了强大的功能来支持这一需求。本文将详细介绍如何使用Struts2框架结合注解(Annotation)的方式...

    struts2annotation json

    在Struts2中,注解的引入使得开发者可以实现零配置的编程,提高了开发效率和代码的可读性。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,广泛用于前后端数据传输。在Struts2中,通过集成JSON...

    Struts2 Spring Hibernate 框架整合 Annotation Maven project.zip

    Struts2与Spring的整合主要体现在Action类的注入,通过Spring的`struts-spring-plugin.xml`配置,Action类可以被Spring容器管理,实现依赖注入。同时,Struts2的拦截器(Interceptor)可以与Spring的AOP相结合,增强...

    struts2 annotation 批量下载

    本文将深入探讨如何利用Struts2的注解功能实现批量下载功能,并通过创建临时文件来处理下载请求,同时确保在下载完成后自动删除这些临时文件,从而有效管理服务器资源。 ### Struts2 Annotation基础 Struts2框架...

    在嵌入式jetty环境下运行struts2Annotation项目

    通过创建的Jetty启动类运行项目,服务器会加载并解析Struts2 Annotation定义的Action,处理请求。 ### 7. 博文链接 提供的博文链接()可能包含更多详细的步骤和示例代码,建议参考以获取更具体的实现方法。 总结...

    Struts2使用Annotation返回Json

    本篇文章将深入探讨如何在Struts2中通过注解实现返回JSON数据的功能。 首先,让我们理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Web应用中...

    SSH2 annotation 实现struts2.1.6 spring2.5.6 hibernate3.3 全注解开发

    在IT行业中,SSH2是一个常见的框架组合,由Struts2、Spring和Hibernate三个组件组成,用于构建企业级的Java Web应用程序。在这个特定的项目中,开发者选择了SSH2的特定版本:Struts2.1.6、Spring2.5.6和Hibernate3.3...

    annotation hibernate struts spring springsecurity API中英文均有

    标题中的"annotation hibernate struts spring springsecurity"涵盖了四个关键的Java开发框架和技术:注解(Annotation)、Hibernate、Struts和Spring Security。这些是构建现代Java企业级应用的基础组件。 **注解...

    struts annotation.ppt

    Struts2注解是Java开发框架Struts2中的一种特性,它引入了JDK1.5及更高版本的注解(Annotation)概念,使得开发者能够更简洁地配置Struts2框架,减少XML配置文件的使用,提高开发效率。注解提供了一种方式,将元数据...

    Struts2 Spring Hibernate 框架整合 Annotation Maven project

    2. 使用Spring的ApplicationContext加载配置,并通过依赖注入将Bean注入到Struts2的动作类中。 3. 配置Hibernate的SessionFactory,并在Spring中管理,以便在需要时获取Session。 4. 定义实体类并使用Hibernate注解...

    struts2-core-2.0.11源码

    2. **配置管理(Configuration Manager)**:Struts2通过`org.apache.struts2.config`包中的类来管理配置信息,包括XML配置文件和注解配置,这些类解析配置并创建Action和Interceptor实例。 3. **Action上下文...

    struts annotation Hello World

    通过这个"struts annotation Hello World"的学习,你可以掌握如何在Struts 2中使用注解来简化开发流程,同时也能对MVC架构有一个基本的理解。进一步研究Struts 2的其他注解和特性,将有助于构建更高效、更易于维护的...

Global site tag (gtag.js) - Google Analytics