为了实现向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真的是个好东西呀!
分享到:
相关推荐
在Struts2中,通过在Action类或方法上使用特定的注解,可以方便地声明和配置拦截器。 例如,`@SkipValidation`注解可以用于跳过某个Action方法的数据验证,`@Action`注解则可以用来定义Action的基本属性,如结果...
在Struts2中,Annotation注解的引入为开发者提供了更加灵活和便捷的配置方式,使得无需在XML配置文件中进行繁琐的设置,可以直接在类或方法上通过注解来进行配置。本文将深入探讨Struts2中的Annotation配置,以及...
在Struts2中,Annotation允许开发者无需XML配置文件就能定义Action、结果类型、拦截器等。 在"struts2 使用Annotation 配置的小例子"中,我们可能会看到以下几个核心的Annotation: 1. `@Action`: 这个Annotation...
Spring的ApplicationContext会初始化所有依赖的对象,包括Struts2的Action和Hibernate的SessionFactory,然后注入到需要这些服务的类中。这样,开发者不需要在Action或DAO中手动创建这些对象,而是由Spring自动提供...
在Struts2中,开发者可以使用注解来声明动作(Action)、结果(Result)和拦截器(Interceptor)等。 2. **Struts2中的主要注解**: - `@Action`: 这个注解用于标记一个Java类作为Struts2的动作类,它定义了请求...
### Struts2 使用注解(Annotation)实现文件下载 在Web开发中,文件上传与下载是常见的需求之一。Struts2框架提供了强大的功能来支持这一需求。本文将详细介绍如何使用Struts2框架结合注解(Annotation)的方式...
在Struts2中,注解的引入使得开发者可以实现零配置的编程,提高了开发效率和代码的可读性。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,广泛用于前后端数据传输。在Struts2中,通过集成JSON...
Struts2与Spring的整合主要体现在Action类的注入,通过Spring的`struts-spring-plugin.xml`配置,Action类可以被Spring容器管理,实现依赖注入。同时,Struts2的拦截器(Interceptor)可以与Spring的AOP相结合,增强...
本文将深入探讨如何利用Struts2的注解功能实现批量下载功能,并通过创建临时文件来处理下载请求,同时确保在下载完成后自动删除这些临时文件,从而有效管理服务器资源。 ### Struts2 Annotation基础 Struts2框架...
通过创建的Jetty启动类运行项目,服务器会加载并解析Struts2 Annotation定义的Action,处理请求。 ### 7. 博文链接 提供的博文链接()可能包含更多详细的步骤和示例代码,建议参考以获取更具体的实现方法。 总结...
本篇文章将深入探讨如何在Struts2中通过注解实现返回JSON数据的功能。 首先,让我们理解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在Web应用中...
在IT行业中,SSH2是一个常见的框架组合,由Struts2、Spring和Hibernate三个组件组成,用于构建企业级的Java Web应用程序。在这个特定的项目中,开发者选择了SSH2的特定版本:Struts2.1.6、Spring2.5.6和Hibernate3.3...
标题中的"annotation hibernate struts spring springsecurity"涵盖了四个关键的Java开发框架和技术:注解(Annotation)、Hibernate、Struts和Spring Security。这些是构建现代Java企业级应用的基础组件。 **注解...
Struts2注解是Java开发框架Struts2中的一种特性,它引入了JDK1.5及更高版本的注解(Annotation)概念,使得开发者能够更简洁地配置Struts2框架,减少XML配置文件的使用,提高开发效率。注解提供了一种方式,将元数据...
2. 使用Spring的ApplicationContext加载配置,并通过依赖注入将Bean注入到Struts2的动作类中。 3. 配置Hibernate的SessionFactory,并在Spring中管理,以便在需要时获取Session。 4. 定义实体类并使用Hibernate注解...
2. **配置管理(Configuration Manager)**:Struts2通过`org.apache.struts2.config`包中的类来管理配置信息,包括XML配置文件和注解配置,这些类解析配置并创建Action和Interceptor实例。 3. **Action上下文...
通过这个"struts annotation Hello World"的学习,你可以掌握如何在Struts 2中使用注解来简化开发流程,同时也能对MVC架构有一个基本的理解。进一步研究Struts 2的其他注解和特性,将有助于构建更高效、更易于维护的...