Spring IOC官方文档学习笔记(十一)之使用JSR 330标准注解
1.使用@Inject和@Named进行依赖注入
(1) Spring提供了对JSR 330标准注解的支持,因此我们也可以使用JSR 330标准注解来进行依赖注入,不过,在此之前,我们得先使用maven添加相关依赖,如下
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
(2) JSR 330标准注解提供了@Inject注解进行依赖注入,它的作用同@Autowired,我们可以将它用于变量,方法或构造函数参数上,如下
@Component
public class ExampleA {
//使用@Inject注解,来进行依赖项的注入,它的作用跟@Autowired是完全一样的,只不过它是java提供的注解,Spring对其作了实现
@Inject
private ExampleB exampleB;
private ExampleC exampleC;
@Inject
public ExampleA(ExampleC exampleC) {
this.exampleC = exampleC;
}
}
(3) @Named注解的作用同@Qualifier注解,也是指定候选的bean的名称,排除其他依赖项的干扰
@Component
public class ExampleA {
//使用@Named注解标识候选bean的名称,如果容器中存在多个ExampleB实例,则选择其中bean的名称为exampleB的那个bean进行注入
@Inject
@Named("exampleB")
private ExampleB exampleB;
}
2.@Named注解与@ManagedBean注解
(1) @Named注解与JSR 250中的注解@ManagedBean可以用来替换掉@Component注解,如下
//使用@Named注解定义一个bean,没错,@Named注解还可用在类上,用于声明一个bean,下面这个例子等同于@Component("aaa")
@Named("aaa")
public class ExampleA { }
//此外,我们还可以用@ManagedBean注解来声明一个bean
@ManagedBean("bbb")
public class ExampleB { }
//开启注解扫描,则Spring也会把被@Named注解与@ManagedBean注解标注的bean添加至容器中
@Configuration
@ComponentScan(basePackages = "cn.example.spring.boke")
public class Config { }
(2) @Component注解可以组合衍生出其他注解,如@Service,@Controller注解等,而@Named注解与@ManagedBean注解不具备这一功能