直接上代码了,假设我们有两个服务类都是继续Do(请参见“objot示例之容器”),分别是DoUser和DoBiz,在DoUser中需要引用到DoBiz,代码如下:
//DoUser.java文件
//DoBiz.java文件
将这些服务加入到容器中后即可随意使用,代码如下:
//Sample.java
运行结果:
开始操作
本例中主要展示了服务间相互引用的解决办法,更详细的关于@Inject的使用,请参见objot文档或源代码.
//DoUser.java文件
package objot.sample.service;
import objot.container.Inject;
/**
* 用户服务
* @author adun
*/
public class DoUser extends Do {
/**
* 被注入的DoBiz,需要添加@Inject标记
*/
@Inject
public DoBiz db;
public void operate() {
db.doSth();
}
}
//DoBiz.java文件
package objot.sample.service;
/**
* 业务处理服务
* @author adun
*/
public class DoBiz extends Do {
public void doSth() {
System.out.println("开始操作");
}
}
将这些服务加入到容器中后即可随意使用,代码如下:
//Sample.java
package objot.sample;
import java.lang.reflect.Method;
import objot.aspect.Aspect;
import objot.aspect.Weaver;
import objot.container.Bind;
import objot.container.Container;
import objot.container.Factory;
import objot.sample.service.Do;
import objot.sample.service.DoUser;
import objot.sample.service.Sign;
import objot.util.Class2;
import objot.util.Mod2;
/**
* 示例主程序
* @author adun
*/
public class Sample {
public static void main(String[] args) throws Exception {
//新建容器工厂
Factory factory = new Factory();
//将继承于Do所在包的所有类绑定到工厂
for(Class<?> c : Class2.packageClasses(Do.class)) {
//判断这些类必须为非abstract
if (!Mod2.match(c, Mod2.ABSTRACT) ) {
factory.bind(c);
}
}
//生成容器c,c的父容器为null
Container c = factory.create(null);
//开始从容器中得到一个DoUser的实例
DoUser du = c.get(DoUser.class);
du.operate();
}
}
运行结果:
开始操作
本例中主要展示了服务间相互引用的解决办法,更详细的关于@Inject的使用,请参见objot文档或源代码.