依赖注入

2.11 依赖注入(dependency injection)
在 传统的开发中,我们要使用某个类对象,可以通过new object来得到。但是在EJB中,需要通过JNDI查找或注入注释。
接口类Injection.java:
package com.sillycat.ejb;

public interface Injection {
 public String sayHello();
}

EJB类InjectionBean.java如下:
package com.sillycat.ejb.impl;

import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;

import com.sillycat.ejb.HelloWorld;
import com.sillycat.ejb.Injection;

@Stateless
@Remote(Injection.class)
public class InjectionBean implements Injection{

 @EJB (beanName="HelloWorldBean") HelloWorld helloWorld;
 public String sayHello() {
  return helloWorld.SayHello("注入类");
 }

}
其中的@EJB  beanName引入类另外一个EJB,helloBean。
我的测试类InjectionTest.java如下:
package com.sillycat.ejb;

import javax.naming.InitialContext;

import org.junit.BeforeClass;
import org.junit.Test;

public class InjectionTest {

 protected static Injection injection;

 @BeforeClass
 public static void setUpBeforeClass() throws Exception {
  InitialContext ctx = new InitialContext();
  injection = (Injection) ctx.lookup("InjectionBean/remote");
 }

 @Test
 public void testSayHello() {
  injection.sayHello();
 }
}
@EJB注释除了可以标注字段,还可以标示到属性的setter方法上,比如替换成如下写法:
 private HelloWorld helloWorld;

 @EJB(beanName = "HelloWorldBean")
 public void setHelloWorld(HelloWorld helloWorld) {
  this.helloWorld = helloWorld;
 }
如果注入的EJB在不同的jar,那么装载次序就有要求,不然要报找不到类。需要修改配置文件:
JBOSS_HOME/server/default/conf/jboss-service.xml找到里面的
<!--
<attribute name="URLComparator">org.jboss.deployment.DeploymentSorter</attribute>
-->
<attribute name="URLComparator">org.jboss.deployment.scanner.PrefixDeploymentSorter</attribute>
然后给jar文件编号,格式为:01_XXXX.jar, 02_XXXX.jar,JBOSS将根据编号从小到大的顺序发布。

2.11.1 资源类型的注入
注入DataSource
@Resource(mappedName="java:/DefaultMySqlDS") DataSource myDb;

注入DataSource带验证
@Resource(mappedName="java:/DefaultMySqlDS",authenticationType=AuthenticationType.APPLICATION) DataSource myDB
使用的时候要这样:
Connection conn = null;
conn = myDb.getConnection("root","*****");

注入事物类
@Resource private javax.transaction.UserTransaction utx;

注入时间服务
@Resource private javax.ejb.TimerService tms;

注入SessionContext 
@Resource private javax.ejb.SessionContext ctx;

注入消息工厂
@Resource(mappedName="QueueConnectionFactory")
private javax.jms.QueueConnectionFactory factory;

注入消息连接地址
@Resource(mappedName="queue/mail")
private javax.jms.Queue queue;

2.11.2 注入与继承关系
InjectionBean注入了HelloWorld
那么public class SubInjectionBean extends InjectionBean 会默认也注入HelloWorld

2.11.3 自定义注入注释

2.12 定时服务(Timer Service)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值