JSR 330 - JiyangM/spring GitHub Wiki

<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

取代@Autowired,javax.inject.Inject 还可以像下面这样使用:

import javax.inject.Inject;

public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Inject
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // ...

}

与@Autowired一样,可以在类级别,字段级别,方法级别和构造方法参数级别使用@Inject。如果你想对被注入的依赖使用限定符名称,你应该按如下方式使用@Named注解:

import javax.inject.Inject;
import javax.inject.Named;

public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Inject
    public void setMovieFinder(@Named("main") MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // ...

}

取代@Component,javax.inject.Named还可以像下面这样使用:

import javax.inject.Inject;
import javax.inject.Named;

@Named("movieListener")
public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Inject
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // ...

}

使用@Component而不指定组件的名称是很常用的方式。@Named可以被用于相同的 情况:

import javax.inject.Inject;
import javax.inject.Named;

@Named
public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Inject
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // ...

}

当使用@Named时,可以使用相同的方式使用Spring注解的组件扫描:

@Configuration
@ComponentScan(basePackages = "org.example")
public class AppConfig  {
    ...
}

当使用标准注解时,了解一些很重要的特性是不可用的是很有必要的,在下面的表格中给出: 表 6.6 Spring注解和标准注解的对比

⚠️ **GitHub.com Fallback** ⚠️