Spring IOC官方文件學習筆記(十一)之使用JSR 330標準註解

shame丶發表於2023-02-18

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註解不具備這一功能

相關文章