`
nkadun
  • 浏览: 55817 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

2.objot示例之注入

阅读更多
直接上代码了,假设我们有两个服务类都是继续Do(请参见“objot示例之容器”),分别是DoUser和DoBiz,在DoUser中需要引用到DoBiz,代码如下:
//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文档或源代码.
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics