Struts2插件的开发

一、插件类

/**
 * 使用Struts2的Plugin机制可以很容易的扩展我们的Application,
 * Struts2扩展点主要包括JavaBeans、Actions、Interceptors、Results等。
 */
public interface MyPlugin {
	public String say();
}

 

public class MyPluginImpl implements MyPlugin {
	public String say() {
		return "I say";
	}
}

 

二、打包插件类

     将插件类打包成一个独立的jar文件,在jar文件的根目录下还必须添加一个文件名为struts-plugin.xml的xml文件,该xml文件的内容如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
    
<struts>
    <bean type="com.cjm.struts2.plugins.plugin1.MyPlugin" name="myplugin" class="com.cjm.struts2.plugins.plugin1.MyPluginImpl" />
</struts>

     将该jar文件放到web项目的lib目录下即可使用该插件了。在加载时struts2框架会搜寻根目录中存在struts-plugin.xml文件的Jar文件。

     bean属性说明:

          type属性:指明了插件的接口
          class属性:指明了实现类

          name属性指明了bean的名字

 

     ant打包脚本:

<?xml version="1.0" encoding="gb2312"?>
<project name="jar" default="jar" basedir=".">
    <target name="jar">		        
    	<jar destfile="${basedir}/myplugin_1.0.jar" basedir="${basedir}/bin"/>
    </target>
</project>

 

三、使用插件

public class HelloWorld extends ActionSupport {
	private Set<MyPlugin> plugins = new HashSet<MyPlugin>();

	public String show() throws Exception {
		for(MyPlugin plugin: plugins){
			System.out.println(plugin.say());
		}
		return SUCCESS;
	}
	
	/**
	 * 通过@Inject注解可以获得Container的引用
	 * 通过Container可以获得Plugin对象实例
	 */
	@Inject
    public void setContainer(Container container) {
		Set<String> names = container.getInstanceNames(MyPlugin.class);
		for(String s: names){
			plugins.add(container.getInstance(MyPlugin.class, s));
		}
	}
}

 

四、获取插件中的常量值

@Inject("com.cjm.struts2.plugins.constant1")
public void setConstant(String constant) {
	this.constant = constant;
}

 

 

你可能感兴趣的:(apache,bean,xml,struts,ant)