@Inject 注解的使用

@Inject 注解可以出现在三种类成员之前,表示该成员需要注入依赖项。按运行时的处理顺序这三种成员类型是:

(1)构造方法

(2)方法

(3)属性

在构造方法上使用 @Inject 时,其参数在运行时由配置好的IoC容器提供。比如,在下面的代码中,运行时调用MurmurMessage类的构造方法时,IoC 容器会注入其参数 Header 和Content 对象。

@Inject
public MurmurMessage(Header header, Content content)
{
    this.headr = header;
    this.content = content;
}

规范中规定向构造方法注入的参数数量是0个或多个,所以在不含参数的构造方法上使用 @Inject 注解也是合法的。

注意:因为JRE无法决定构造方法注入的优先级,所以规范中规定类中只能有一个构造方法带@Inject注解

也可以用@Inject注解方法,与构造方法一样,运行时可注入的参数数量为0个或多个。但使用参数注入的方法不能声明为抽象方法也不能声明其自身的类型参数。下面这段代码在set方法前使用@Inject,这是注入可选属性的常用技术。

@Inject
public void setContent(Content concent)
{
    this.content = content;
}

向方法中注入参数的技术对于服务类方法来说非常有用,其所需的资源可以作为参数注入,比如向查询数据的服务方法中注入数据访问对象(Dao)。

也可以直接在属性上注入(只要它们不是final),虽然这样做简单直接,但是不提倡这样做,因为这样做会让单元测试更加困难。直接注入的语法也很简单。

public class MurmurMessager
{
    @Inject
    private MurmurMessage murmurMessage;
    
    ...
}

@Inject注解 (JSR330规范提供的注解(javax.inject.Inject),主要导入javax.inject包才能使用)

和@Autowired  (Spring本身替换的注解(org.springframework.beans.factory.annotation.Autowired),需要导入Spring相应的jar包才能使用) 作用基本等同,区别:

@Autowired注解有一个required属性,当指定required属性为false时,意味着在容器中找相应类型的bean,如果找不到则忽略,而不报错(这一条是两个注解所没有的功能)。由于@Inject注解没有属性,在加载所需bean失败时,会报错

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值