Spring系列常用注解

本文详细介绍了SpringBoot框架中的核心注解,包括@SpringBootApplication的配置、@SpringBootConfiguration的配置类声明、@EnableAutoConfiguration的自动装配,以及各类如Repository、Service、Controller的使用方法和注解功能。
摘要由CSDN通过智能技术生成

Spring系列常用注解说明

一、SpringBoot/Spring框架注解

1. @SpringBootApplication
  • 包含的核心注解:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {...}
2. @SpringBootConfiguration
  • 核心注解@Configuration,让当前类作为一个配置类交由 Spring 的 IOC 容器进行管理。
3. @EnableAutoConfiguration
  • 实现自动装配。由 @AutoConfigurationPackage 和 @Import 注解组成的复合注解。
4. @ComponentScan
  • 用于定义 Spring 的扫描路径。如果不配置扫描路径,Spring 会默认扫描当前类所在的包及其子包中的所有标注了 @Component,@Service,@Controller 等注解的类。
5. @Repository
  • 用于标注数据访问组件,即DAO组件。
6. @Service
  • 用于标注业务层组件。
7. @RestController
  • 用于标注控制层组件(如struts中的action),包含@Controller和@ResponseBody。
8. @Controller
  • 用于标注是控制层组件,需要返回页面时请用@Controller而不是@RestController。
9. @Component
  • 通用注解,用于标记一个类为组件,让Spring能够在应用程序启动时自动扫描并加载这些组件,但只会自动扫描指定包及其子包下的组件。可以在启动类上添加@ComponentScan注解,指定要扫描的包路径。
10. @ResponseBody
  • 将Controller的方法返回的对象,通过适当的转换器转换为指定的格式之后,写入到response对象的body区。使用此注解之后不会再走视图处理器。
  • 一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,
    加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response的body中。
11. @RequestBody:
  • 主要用来接收前端传递给后端的json字符串中的数据。
  • 与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
12. @ComponentScan
  • 用于类或接口上主要是指定扫描路径,spring会把指定路径下带有指定注解的类(@Controller、@Service、@Component、@Repository等)自动装配到bean容器里。
  • 默认会扫描该类所在的包及其子包下的组件。
  • 没有显示配置组件id时,就会把类名第一位转化为小写作为该组件的id。如果不同包中有相同名字的类,在扫描时就会报错。
1. 扫描指定类文件
   @ComponentScan(basePackageClasses = Person.class)
 2. 扫描指定包,使用默认扫描规则,即被@Component, @Repository, @Service, @Controller或者已经声明过@Component自定义注解标记的组件;
   @ComponentScan(value = "com.example")
 3. 扫描指定包,加载被@Component注解标记的组件和默认规则的扫描(因为useDefaultFilters默认为true@ComponentScan(value = "com.example", includeFilters = { @Filter(type = FilterType.ANNOTATION, value = Component.class) })
 4. 扫描指定包,只加载Person类型的组件
   @ComponentScan(value = "com.example", includeFilters = { @Filter(type = FilterType.ASSIGNABLE_TYPE, value = Person.class) }, useDefaultFilters = false)
 5. 扫描指定包,过滤掉被@Component标记的组件
   @ComponentScan(value = "com.example", excludeFilters = { @Filter(type = FilterType.ANNOTATION, value = Component.class) })
 6. 扫描指定包,自定义过滤规则
   @ComponentScan(value = "com.example", includeFilters = { @Filter(type = FilterType.CUSTOM, value = MtyTypeFilter.class) }, useDefaultFilters = true)
13. @Configuration
  • 指示一个类声明一个或多个@Bean方法,并且可以由Spring容器处理,以便在运行时为这些bean生成BeanDefinition和服务请求。
@Configuration
public class AppConfig {
    @Bean
    public MyBean myBean() {
        //...
    }
}
14. @Bean
  • 用于将对象存入spring的ioc容器中,同@controller、@Service、@Component、@Configuration、@Repository等几个注解是一样的,都是负责将对象存入容器当中。只不过方式不同,他们是用在类上面的,然后将当前类通过无参构造函数创建对象然后放入容器,而@Bean是用在方法上,将当前方法的返回值对象放到容器当中。
15. @AutoWired:
  • 可以对成员变量、方法和构造函数进行标注,来完成自动装配。
  • 默认根据类型进行自动装配,如果需要按名称进行装配,则需要配合@Qualifier使用。
  • 它的注入方式通过Java的反射机制实现,所以private的成员也可以被注入具体的对象。
  • 当遇到两个及以上相同类型的bean时,则会报错,找不到准确的bean。改为根据属性名自动装配,或者加上(required=false)设置为不自动装配,就算找不到bean也不报错。
    在这里插入图片描述
16. @Qualifier
  • 当有多个同一类型的Bean时,可以用@Qualifier(“name”)来指定。与@Autowired配合使用;
17. @Resource(name=”name”,type=”type”)
  • 默认按byName进行注入,如果无法通过名称匹配到对应的 Bean 的话,注入方式会变为byType。
  • @Resource是Java自己的注解,Spring将@Resource注解的name属性解析为bean的名称,type属性解析为bean的类型。
18. @RequestMapping
  • RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。
  • 用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法。
  • 从源码中可以看到value属性是一个字符串类型数组,因此说明可以将多个请求映射到一个方法上,只需要给 value 来指定一个包含多个路径的数组(@RequestMapping(value = {“/test1”,“/test2”}))。
//@RequestMapping注解类源码
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String name() default "";
    @AliasFor("path")
    String[] value() default {};
    @AliasFor("value")
    String[] path() default {};
    RequestMethod[] method() default {};
    String[] params() default {};
    String[] headers() default {};
    String[] consumes() default {};
    String[] produces() default {};
}
19. @GetMapping、@PostMapping、@PutMapping等

相当于@RequestMapping(value=”/”,method=RequestMethod.Get\Post\Put\Delete等) 。是个组合注解;

20. @RequestParam:
  • 用在方法的参数前面。相当于 request.getParameter()。将指定的请求参数赋值给方法中的形参。
1.value:请求参数名(必须)。
2.required:是否必需,默认为 true,即请求中必须包含该参数,如果没有包含,将会抛出异常(可选)。
3.defaultValue:默认值,如果设置了该值,required将自动设为false,无论你是否配置了required,值是什么,都是false(可选)。
21. @PathVariable
  • 映射url绑定的占位符。将url中占位符参数绑定到控制器处理方法的参数中。
@RequestMapping("/user/{id}")
public String testPathVariable(@PathVariable("id") String id){
    return "success";
}
  • 方法参数名称和需要绑定的url中变量名称一致时,可以简写。
@RequestMapping("/user/{id}")
public String testPathVariable(@PathVariable String id){
    return "success";
}
22. @CrossOrigin
  • 将为请求处理类或请求处理方法提供跨域调用支持。
  • 如果在类上加此注解,那么类中的所有方法都将获得支持跨域的能力。
23. @Primary
  • 当系统中需要配置多个具有相同类型的bean时,@Primary可以定义这些Bean的优先级。
public interface UserService {
	public void sendMsg();
}

@Component
public class Test1 implements UserService {
	@Override
	public void sendMsg(){
		System.out.println("111");
	};
}

@Primary
@Component
public class Test2 implements UserService {
	@Override
	public void sendMsg(){
		System.out.println("222");
	};
}

@RestController
public class TestController(){
	@Awtowired
	private UserService userService;
	
	@GetMapping("/index")
	public String test(){
		userService.sendMsg();
		return "ok";
	}
}

//输出结果为222
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值