Xwork2的注入框架

Xwork2的注入框架

http://www.gwdang.com

http://www.gwdang.com/app/extension

需要xwork-core-2.3.1.jar包。

1、Xwork2的容器类为Container它只是一个接口。它的子类ContainerImpl设置为受保护的类,外部程序不可以访问。

2、@Inject是Xwork2的注解类,用于在运行时注入受Xwrok管理的对象。

3、ContainerBuilder类为Xwork2的工具类,用于创建Container容器对象。

由于Struts2的底层实现为xwork2,所以有必要小小的研究以下xwrok2管理容器的注入值的方式。

以下是示例代码:

示例1:最简单的用容器管理一个对象的创建:

package tt;

import com.opensymphony.xwork2.inject.Container;

import com.opensymphony.xwork2.inject.ContainerBuilder;

/**

 * XWork的容器框架

 * @author  <a href=mailto:[email protected]>穆永超</a>

 * @version  1.0 2013-3-26

 */

public class XWorkContainerDemo {

public static void main(String[] args) {

//XWork的容器框架,声明容器构建对象

ContainerBuilder cb = new ContainerBuilder();

//设置一个被管理对象

cb.factory(Person.class);

//创建容器

Container c = cb.create(true);

//从容器中获取被容器创建的对象。以下代码,每次都会创建一个新对象

Person p =  c.getInstance(Person.class);

//调用对象的方法

p.say();

}

}

//声明一个被管理对象

class Person{

public void say(){

System.err.println("Hello");

}

}

运行结果,即是输出Hello。

示例2:最简单的使用@Inject注入:

package tt;

import com.opensymphony.xwork2.inject.Container;

import com.opensymphony.xwork2.inject.ContainerBuilder;

import com.opensymphony.xwork2.inject.Inject;

/**

 * XWork的容器框架

 * @author  <a href=mailto:[email protected]>穆永超</a>

 * @version  1.0 2012-4-18

 */

public class XWorkContainerDemo2 {

public static void main(String[] args) {

//声明容器构建对象

ContainerBuilder cb = new ContainerBuilder();

//设置被管理对象

cb.factory(Tom.class);

//设置一个被管理的常量,key为name值为Jack

cb.constant("name","我的名称是Jack");

//创建容器

Container c = cb.create(true);

//从容器中获取Tom的实例

Tom t =  c.getInstance(Tom.class);

//调用say方法

t.say();

}

}

class Tom{

//注意此处,注入name的值

@Inject(value="name")

private String name;

public void say(){

//以下将输出Hello>Jack

System.err.println("Hello>"+name);

}

}

输出的结果为:

Hello>我的姓名是Jack

示例3:声明接口及实现类,通过构造方法注入

package tt;

import com.opensymphony.xwork2.inject.Container;

import com.opensymphony.xwork2.inject.ContainerBuilder;

import com.opensymphony.xwork2.inject.Inject;

/**

 * XWork的容器框架

 * @author  <a href="mailto:mailto:[email protected]>穆永超</a>

* @version 1.0 2012-4-18

 */

public class XWorkContainerDemo3 {

public static void main(String[] args) {

ContainerBuilder cb = new ContainerBuilder();

cb.factory(IAnimal.class,Cat.class);//这两个类上必须要有继承关系

cb.factory(IFood.class,Fish.class);

Container c = cb.create(true);

IAnimal cat = c.getInstance(IAnimal.class);

cat.eat();

}

}

interface IAnimal{ //声明接口

public void eat();

}

class Cat implements IAnimal{

private IFood food;

/**

 * 如果要通过构造方法注入

 * 则必须要要构造方法上,和参数上同时添

 * Inject注解

 */

@Inject

public Cat(@Inject IFood food) {//构造中的参数,按类型进行匹配

this.food=food;

}

public void eat() {

System.err.println("小猫在吃:"+food);

}

}

interface IFood{}

class Fish implements IFood{

public String toString() {

return "我是小鱼";

}

}

输出的结果为:小猫在吃:我的小鱼ao


你可能感兴趣的:(Xwork2的注入框架)