Spring及SpringBoot中的注解
作者:程序员CKeen
博客:http://ckeen.cn
长期坚持做有价值的事!积累沉淀,持续成长,升维思考!希望把编码作为长期兴趣爱好😄
1.Spring中的注解
@Component注解
用于标识一个类为 Spring 组件,让 Spring 自动扫描并注册为 bean。
@Autowired注解
用于自动装配 bean,可以标注在字段、构造函数、Setter 方法上。
@Controller注解
用于标识控制器,让 Spring 自动扫描并注册为 bean。
@Service注解
用于标识服务,让 Spring 自动扫描并注册为 bean。
@Repository注解
数据访问层的组件,让 Spring 自动扫描并注册为 bean。
@RequestMapping注解
用于映射 HTTP 请求到控制器的处理方法。
@PathVariable注解
用于将 URL 中的模板变量绑定到方法的参数上。
@RequestParam注解
用于将请求参数绑定到方法的参数上。
@ResponseBody注解
用于将方法的返回值直接作为 HTTP 响应的内容返回。
@Configuration注解
用于标识一个类为配置类,可以使用 @Bean 注解定义 bean。
@Value注解
用于注入属性值。
@Transactional注解
用于标识事务管理的方法或类。
2.SpringBoot中的注解
@SpringBootApplication 注解
查看源码可发现,@SpringBootApplication是一个复合注解,包含了@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan这三个注解。
@SpringBootConfiguration
标注当前类是配置类,这个注解继承自@Configuration。并会将当前类内声明的一个或多个以@Bean注解标记的方法的实例纳入到srping容器中,并且实例名就是方法名。
@EnableAutoConfiguration
SpringBoot通过@EnableAutoConfiguration注解开启自动配置,加载spring.factories文件中注册的各种AutoConfiguration,当某个AutoConfiguration类满足@Conditional指定的生效条件时,实例化该AutoConfiguration类中定义的Bean,注入到Spring容器中,就可以完成依赖框架的自动配置。
- 需要和@Configuration配合使用;
- 用于实例化依赖包中的对象;
- 一般需要在META-INF/spring.factories中进行配置;
- 经常用于自定义的starter中。
@EnableAutoConfiguration = @AutoConfigurationPackage + @Import({AutoConfigurationImportSelector.class})
@ServletComponentScan
Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,这样通过注解servlet ,拦截器,监听器的功能而无需其他配置,所以这次相中使用到了filter的实现,用到了这个注解。
@ImportResource(locations={})
导入其他xml配置文件,需要标准在主配置类上。导入property的配置文件
@PropertySource
指定文件路径,这个相当于使用spring的标签来完成配置项的引入。
是一个可以将普通类导入到spring容器中做管理
条件注解
@ConditionalOnBean
是否存在某个类或某个名字的Bean,例如@ConditionalOnBean( value= UserService.class)表示如果存在UserService的Bean则导入, 也可以使用name去识别bean
@ConditionalOnMissingBean
是否缺失某个类或某个名字的Bean。也可以使用value和name。 如果不配置参数value和name,spring会去推断一个类型
@ConditionalOnSingleCandidate
是否符合指定类型的Bean只有一个
@ConditionalOnClass
是否存在某个类
@ConditionalOnMissingClass
是否缺失某个类
@ConditionalOnExpression
指定表达式返回的是true还是false
@ConditionalOnJava
判断java的版本
@ConditionalOnJndi
JNDI指定的资源是否存在
@ConditionalOnWebApplication
当前应用是否为一个web应用
@ConditionalOnNotWebApplication
当前应用是否不是一个web应用
@ConditionalOnProperty
Environment中是否存在某个属性
@ConditionalOnResource
指定的资源是否存在