- 用于创建对象的注解
作用: 和XML配置文件中编写一个<bean>标签实现的功能一样.
eg: <bean id="accountService" class="com.test.service.AccountService">
1) @Component
作用: 将当前类对象存入spring容器
属性:
value: 用于指定bean的id,当我们不写时,它的默认值是当前类名,且首字母该小写.
2) @Controller
作用: 同@Component
属性: 同@Component
3) @Service
作用: 同@Component
属性: 同@Component
4) @Repository
作用: 同@Component
属性: 同@Component
区分@Controller、@Service、@Repository的目的:
这三个注解是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰.
@Controller: 表现层; @Service: 业务层; @Repository: 持久层.
- 用于注入数据的注解
作用: 和xml配置文件中的bean标签中写一个<property>标签的作用是一样的.
1) @Autowired
作用: 自动按照类型注入.只要容器中有唯一的一个bean对象类型(通过@Component/@Controller/@Service/@Repository注入容器)和要注入的变量类型匹配,就可以注入成功.
如果IOC容器中没有任何bean的类型和要注入的变量类型匹配,则报错.
如果IOC容器中有多个类型匹配时,通过@qualifier注解
出现位置: 变量/方法.
细节: 在使用注解注入时,setter方法不是必须的.
2) @qualifier(value="bean_id")
作用: 在按照类型注入的基础上再按照名称注入,它在给类成员注入时不能单独使用,但是在给方法参数注入时可以单独使用,要和@Autowired注解一起使用.
属性: value:用来指定注入的bean的id
3) @Resource(name="bean_id")
作用: 直接按照bean的id注入,它可以独立使用
属性: name:用来指定bean的id
注: 以上三个注解都只能注入其他bean类型的数据,而基本类型和string类型无法使用上述注解实现.另外集合类型的注入只能通过xml来实现.
4) @Value
作用: 用于注入基本类型和string类型的数据.相当于:
<bean class="">
<property name="lastName" value=""/>
<bean/>
属性: value: 用于指定数据的值,它可以使用
① ${key}: 从环境变量、配置文件中获取值
② “字面量”
③ spring中SpEL(即spring的el表达式)
如: @Value("${person.last-name}")
private String lastName;
@Value("#{11*2}")
private Integer age;
@Value("false")
private Boolean boss;
5) @ConfigurationProperties
作用: 将配置文件中配置的每一个属性的值映射到这个组件中.默认从全局配置文件中获取值,如果配置了@PropertySource注解以及指明了prefix,则从指定的文件中获取前缀为prefix指定值的数据.
属性: 常用的有prefix, prefix = "person": 配置文件中该标签下面的所有属性进行一一映射。
6) @PropertySource
作用: 用于指定properties文件的位置,比如用在数据库配置类上.如果用在java bean类上,要和@ConfigurationProperties(prefix="")注解搭配使用.
属性: value: 指定文件的名称和路径. 关键字:classpath,表示类路径下
@ConfigurationProperties和@Value注解的区别:
@ConfigurationProperties | @Value | |
---|---|---|
功能 | 批量注入配置文件中的属性 | 一个个指定 |
松散绑定(松散语法,比如lastName和last-name、last_name) | 支持(这几个字段会识别相同) | 不支持 |
SpEL(比如#{11*2} ) | 不支持 | 支持 |
JSR303数据校验(比如@email检验该字段值是否是邮箱) | 支持 | 不支持 |
复杂类型封装(比如map等) | 支持 | 不支持 |
@ConfigurationProperties和@Value注解的应用场景:
- 如果只是在某个业务逻辑中需要获取一下配置文件中的某些值,使用@value
- 如果专门编写了一个javaBean(如yml文件或properties文件)来和配置文件进行映射,就直接使用@ConfigurationProperties.
- 用于改变作用范围的注解
@Scope
作用: 用于指定bean的作用范围
属性: value: 指定范围的取值,常用取值: singleton(单例)、prototype(多例)
- 和生命周期有关的注解
@PreDestroy: 用于指定销毁方法
@PostConstruct: 用于指定初始化方法
- 配置文件中的注解
1) @Configuration
作用: 指定当前类是一个配置类,用于取代比如spring的配置文件
细节: 当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写.当还有其他配置类时,可以:
- 使用@Import注解
- AnnotationConfigApplicationContext对象参数加上其他配置类字节码
- 其他配置类加上@Configuration注解并且在主配置类(AnnotationConfigApplicationContext对象参数)的@ComponentScan注解中加上其他配置类所属包
2) @ComponentScan
作用: 指定spring在创建容器时要扫描的包,取代<context:component-scan base-package="com.annotation"/>
属性:
value: 指定创建容器时要扫描的包
3) @Bean
作用: 告诉spring这个方法将会返回一个对象,这个对象要注册到spring应用上下文中的bean.通常方法体中包含了最终产生bean实例的逻辑.即将方法的返回值添加到容器中,容器中的这个组件默认的id名就是方法名
@Bean和@Component类(包括@Service等)的异同:
相同点: 都是用来注册Bean并装配到spring容器中.
不同点:
1) @Bean作用于方法,而@Component作用域类
2) @component通常是通过类路径扫描来自动侦测以及自动装配到spring容器中.
而@Bean注解通常是我们在标有该注解的方法中定义产生这个bean的逻辑.
4) @Import
作用: 用于导入其他配置类的字节码 / 应用于有时没有把某个类注入到IOC容器中,但在运用的时候需要获取该类对应的bean的场景.
属性: value: 用于指定其他配置类的字节码,当我们使用@Import注解后,有@Import注解的类就是父配置类,而导入的都是子配置类.
5) @ImportResource
作用: 导入spring的配置文件,让配置文件中的内容生效
属性: locations,指定配置文件的位置
eg: @ImportResource(locations = {"classpath:beans.xml"})
6) @PropertySource
作用: 用于指定properties文件的位置,比如用在数据库配置类上
属性: value: 指定文件的名称和路径. 关键字:classpath,表示类路径下
- 测试类中的注解
1) @RunWith
作用: 是一个运行器,比如
- @RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境,以便在测试开始的时候自动创建Spring的应用上下文,从而可以在测试期间很方便的类似编码一样进行自动注入等容器功能
- @RunWith(JUnit4.class)就是指用JUnit4来运行
- @RunWith(Suite.class)的话就是一套测试集合
2) @ContextConfiguration
作用: 导入xml或class的Spring配置文件,如:
@ContextConfiguration(classes = SpringConfiguration.class)
@ContextConfiguration(locations = {"classpath*:/*.xml"})
- springboot相关注解
1) @SpringBootApplication
作用: 标识这是一个springboot应用,并且这是一个主程序类
2) @ResponseBody
作用: 将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML
3) @RestController
作用: @ResponseBody注解和@Controller注解的合体
- 前端相关注解
1) @RequestMapping
作用: 该注解标注的方法处理参数路径的请求
参数: 默认为name,即路径名,默认不用写,如: @RequestMapping("/hello")