spring常见注解学习总结

Posted by Shi Hai's Blog on October 30, 2023

@SpringBootApplication

主应用程序的配置项。

@Bean

官方介绍:In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans. A bean is an object that is instantiated, assembled, and managed by a Spring IoC container. Otherwise, a bean is simply one of many objects in your application. Beans, and the dependencies among them, are reflected in the configuration metadata used by a container.
中文翻译:在Spring中,构成应用程序主干并由Spring IoC容器管理的对象称为Bean。Bean是由Spring IoC容器实例化、组装和管理的对象。否则,Bean只是应用程序中许多对象之一。Bean及其之间的依赖关系反映在容器使用的配置元数据中。 Spring IoC 容器和Bean的介绍

@Component

此注解容许Spring能自动探测扫描我们自定义的Bean
Spring提供了一些专门的构造性注解,如:@Controller@Service@Repository@Configuration。这些注解和@Component注解提供的功能是一样的,因为这些注解里用了@Component作为元注解。 @Bean注解也是Spring用于收集运行时的bean,但@Bean不是类级别的注解。如果我们对方法使用@Bean进行注解,那么Spring就会把这些方法的返回结果作为Spring Bean保存起来。

@Repository

在持久层注释类,该类会作为数据库存储库来使用。此外,此注解会捕捉持久层相关的异常。

@Resource @Inject @Autowired

这些注解为解决依赖关系提供了申明式方式。

@Resource

帮助我们从Spring容器中提取Bean。此注解有三种查找方式来寻找Bean,按优先级依次为:

  • 通过Name匹配
  • 通过Type匹配
  • 通过Qualifier匹配 下面这个示例就是按Name来匹配提取Bean
@Configuration
public class ApplicationContext {
     
    // Put the bean into the spring container
    @Bean(name = "userFile")
    public File userFile() {
        File file = new File("user.txt");
        return file;
    }
}

@Service
class UserService {

   // Ask the container to get the bean and 'put' it here (inject)
   @Resource(name = "userFile")
   private File userFile;
}

@Inject

此注解也有三种查找方式来寻找Bean,按优先级依次为:

  • 通过Type匹配
  • 通过Qualifier匹配
  • 通过Name匹配 使用此包我们需要引入新的三方包。

在Gradle中:

testCompile group: 'javax.inject', name: 'javax.inject', version: '1'

在Maven中:

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

@Autowired

@Inject类似,不过此注解是Spring Framework提供的。

@Qualifier

我们使用@Autowired@Resource等注解来注入对象时,如果注解按Type来匹配,如果同Type中有多个Bean就会导致Spring无法确认需要 匹配精确的Bean,此时就需要@Qualifier来明确需要注入的对象。

@Resource
@Qualifier("defaultFile")
private File dependency1;

@Resource
@Qualifier("namedFile")
private File dependency2;

@Value

可以通过此注解将值注入到Spring管理的Bean的字段中,此注解在字段或者函数级别均可使用。

@Value("string value")
private String stringValue;

或者从配置文件中获取某些值进行注入。

@Value("${value.from.file}")
private String valueFromFile;

另外,此注解还支持使用Spring表达式语言(SPEL)。

@Value("#{systemProperties['priority']}")
private String spelValue;

@ComponentScan

扫描所有使用@Component注解的Bean

@MapperScan

使用此注解扫描所有@Mapper定义的Mybatis接口以及mapper相关注解,如:@Select等。

@Mapper
public interface ArticleMapper {
    @Select("SELECT * FROM ARTICLES WHERE id = #{id}")
    Article getArticle(@Param("id") Long id);
}

@Configuration

通过此注解,我们就可以让Spring在应用上下文中创建一个新的Spring Bean来单独管理配置。

@ContextConfiguration

TBD

@Test

用此注解执行测试,使用@SpringBootTest注解加载应用上下文。

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringContextTest {
    @Test
    public void contextLoads() {
    }
}

参考文档