Spring开发注解(总结)

本文详细介绍了Spring框架中常用的注解,包括@Component及其派生注解@Controller、@Service、@Repository,用于定义不同层次的bean。此外,还提到了@Configuration和@ComponentScan在配置和扫描bean中的作用,以及@PostConstruct、@PreDestroy对bean生命周期的管理。文章还讨论了@Autowired、@Qualifier、@Bean等自动装配和bean定义的注解,以及@Import、@RunWith、@ContextConfiguration等其他关键注解。在事务管理和AOP方面,提到了@Transactional和@EnableAspectJAutoProxy。最后,文章涵盖了SpringMVC相关注解,如@RequestMapping、@ResponseBody、@RequestParam,以及日期格式化和异常处理的注解。
@Component定义bean
@Controller:用于表现层bean定义
@Service:用于业务层bean定义
@Repository:用于数据层bean定义
@Configuration注解用于设定当前类为配置类
@ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式
@Scope定义bean作用范围
@PostConstruct、@PreDestroy定义bean生命周期
**注意:@PostConstruct和@PreDestroy注解是jdk中提供的注解,从jdk9开始,jdk中的javax.annotation包被移除了,也就是说这两个注解就用不了了,可以额外导入一下依赖解决这个问题。**
<dependency>
  <groupId>javax.annotation</groupId>
  <artifactId>javax.annotation-api</artifactId>
  <version>1.3.2</version>
</dependency>
@Autowired:注入引用类型,自动装配模式,默认按类型装配
@Qualifier:自动装配bean时按bean名称装配(@Qualifier注解无法单独使用,必须配合@Autowired注解使用)
@PropertySource加载properties配置文件
@Bean:表示当前方法的返回值是一个bean对象,添加到IOC容器中
@Import:导入配置信息
@RunWith(SpringJUnit4ClassRunner.class)   Spring整合Junit专用的类加载器
@ContextConfiguration  junit加载配置文件
@Aspect  设置当前类为切面类
//设置切入点,@Pointcut注解要求配置在方法上方
@Pointcut("execution(void com.itheima.dao.BookDao.update())")
@EnableAspectJAutoProxy   开启注解开发AOP功能
@Transactional  配置当前接口方法具有事务
@EnableTransactionManagement   开启注解式事务驱动
处理乱码问题:
get:
<build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <port>80</port><!--tomcat端口号-->
          <path>/</path> <!--虚拟目录-->
          <uriEncoding>UTF-8</uriEncoding><!--访问路径编解码字符集-->
        </configuration>
      </plugin>
    </plugins>
  </build>
post:
protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
SpringMVC@RequestMapping   设置当前控制器方法请求访问路径//类上方配置的请求映射与方法上面配置的请求映射连接在一起,形成完整的请求映射路径
@ResponseBody   设置当前控制器方法响应内容为当前返回值,无需解析
@ComponentScan(value = "com.itheima",
               excludeFilters = @ComponentScan.Filter(
                   type = FilterType.ANNOTATION,
                   classes = Controller.class
               )
              )       //过滤不需要扫描的包
//1. excludeFilters:排除扫描路径中加载的bean,需要指定类别(type)与具体项(classes)
//2. includeFilters:加载指定的bean,需要指定类别(type)与具体项(classes)
@RequestParam注解关联请求参数名称与形参名称之间的关系//普通参数:请求参数名与形参名不同时,使用@RequestParam注解关联请求参数名称与形参名称之间的关系
@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换
@RequestBody  将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次

 @RequestBody@RequestParam区别
- 区别
  @RequestParam用于接收url地址传参,表单传参【application/x-www-form-urlencoded】
  @RequestBody用于接收json数据【application/json】
- 应用
  后期开发中,发送json格式数据为主,@RequestBody应用较广
  如果发送非json格式数据,选用@RequestParam接收请求参数
@DateTimeFormat注解设置日期类型数据格式,默认格式yyyy/MM/dd
@PathVariable注解用于设置路径变量(路径参数),要求路径上设置对应的占位符,并且占位符名称与方法形参名称相同
@GetMapping  @PostMapping  @PutMapping  @DeleteMapping代替@RequestMapping(method=RequestMethod.XXX)
@RestController    @Controller@ResponseBody注解,简化书写
@RestControllerAdvice  //用于标识当前类为REST风格对应的异常处理器
@ExceptionHandler  //设置指定异常的处理方案,功能等同于控制器方法,出现异常后终止原始控制器执行,并转入当前方法执行

Spring 框架中,注解是简化配置、提升代码可读性和可维护性的关键工具。这些注解主要分为以下几类,涵盖了配置管理、依赖注入、AOP、事务管理、生命周期控制等多个方面。 ### 3.1 配置相关注解 `@Configuration` 用于标记一个类为配置类,替代 XML 配置文件,通常与 `@Bean` 一起使用来定义 Spring 容器中的 Bean[^2]。 `@ComponentScan` 用于自动扫描和注册 Bean,Spring 容器会自动注册带有 `@Component`、`@Service`、`@Repository` 等注解的类为 Bean[^1]。 ### 3.2 IOC(容器)相关注解 `@Component` 用于标记一个类为 Spring 容器管理的组件,适用于通用的组件[^1]。 `@Service` 用于标记业务逻辑层的组件,语义上更明确地表示该类用于业务逻辑处理[^2]。 `@Repository` 用于标记数据访问层的组件,除了注册 Bean 的功能外,还提供了异常转换功能,将数据库异常转换为 Spring 的统一异常体系[^2]。 ### 3.3 DI(依赖注入)相关注解 `@Autowired` 用于自动注入依赖,可以用于字段、构造器、方法等位置,Spring 会自动查找匹配的 Bean 并注入[^3]。 `@Qualifier` 通常与 `@Autowired` 配合使用,用于指定具体的 Bean 名称,避免多个相同类型的 Bean 导致的冲突。 ### 3.4 AOP(方法增强)相关注解 `@Aspect` 用于定义一个切面类,包含多个切点和通知[^2]。 `@Pointcut` 用于定义切点,即指定哪些方法需要被增强。 `@Before`、`@After`、`@Around` 分别用于定义前置通知、后置通知和环绕通知,控制方法执行前、执行后和环绕执行的行为[^2]。 ### 3.5 事务管理相关注解 `@Transactional` 用于开启事务管理,可以应用于类或方法级别,确保数据库操作的事务性。 ### 3.6 生命周期相关注解 `@PostConstruct` 用于标记初始化方法,在 Bean 创建后执行,通常用于资源加载或初始化操作[^2]。 `@PreDestroy` 用于标记销毁方法,在 Bean 被销毁前执行,通常用于释放资源。 ### 3.7 单元测试相关注解 `@RunWith(SpringRunner.class)` 用于在测试类中集成 Spring 上下文,使得测试类可以使用 Spring 管理的 Bean。 `@SpringBootTest` 用于启动完整的 Spring Boot 应用上下文,适用于集成测试。 ### 3.8 异步调用相关注解 `@EnableAsync` 用于启用异步方法调用,需要配合 `@Async` 使用。 `@Async` 用于标记某个方法为异步方法,Spring 会使用线程池执行该方法,避免阻塞主线程[^2]。 ### 3.9 Web 开发相关注解 `@RestController` 是 `@Controller` 和 `@ResponseBody` 的组合,适用于构建 RESTful API,自动将返回值转换为 HTTP 响应体[^3]。 `@RequestMapping` 用于映射 HTTP 请求到特定的类或方法,支持多种 HTTP 方法(GET、POST 等)[^4]。 `@GetMapping`、`@PostMapping`、`@PutMapping`、`@DeleteMapping` 是 `@RequestMapping` 的快捷方式,分别用于映射 GET、POST、PUT、DELETE 请求。 ### 3.10 示例代码 以下是一个使用常见注解的简单 Spring Boot 控制器示例: ```java @RestController @RequestMapping("/users") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public User getUser(@PathVariable Long id) { return userService.getUserById(id); } @PostMapping public User createUser(@RequestBody User user) { return userService.createUser(user); } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值