@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() {
}
}
参考文档
- Load a Resource as a String in Spring
- Spring Boot Tutorial – Bootstrap a Simple Application
- Access a File from the Classpath in a Spring Application
- Wiring in Spring: @Autowired, @Resource and @Inject
- Spring Static Resources
- Stackoverflow: Meaning of @Resource annotation
- Guide to Spring @Autowired
- The Spring @Qualifier Annotation
- What Is a Spring Bean?
- Spring @Component Annotation
- A Quick Guide to Spring @Value
- MyBatis with Spring
- @Component vs @Repository and @Service in Spring
- How to read JSON data in Spring Boot and write to a database
- Listing all beans