1、Junit
开始执行的方法:初始化资源,执行完之后的方法:释放资源
测试方法,必须是:公有、非静态、无参无返回值的
在一个类中,可以定义多个测试方法,每个测试方法可以单独运行,也可以整体运行(顺序:方法名升序)
Junit 4
注解 |
说明 |
@Test |
测试方法 |
@Before |
用来修饰实例方法,在每个 @Test 之前被执行,可以有多个,按方法名 "降序" 依次执行 |
@After |
用来修饰实例方法,在每个 @Test 之后被执行,可以有多个,按方法名 "升序" 依次执行 |
@BeforeClass |
用于 "静态" 方法,在所有的 @Before 之前被执行,且只执行一次 |
@AfterClass |
用于 "静态" 方法,在所有的 @After 之前被执行,且只执行一次 |
Junit 5
注解 |
说明 |
@Test |
测试方法 |
@BeforeEach |
用来修饰实例方法,在每个 @Test 之前被执行,可以有多个,按方法名 "降序" 依次执行 |
@AfterEach |
用来修饰实例方法,在每个 @Test 之后被执行,可以有多个,按方法名 "升序" 依次执行 |
@BeforeAll |
用于 "静态" 方法,在所有的 @BeforeEach 之前被执行,且只执行一次 |
@AfterAll |
用于 "静态" 方法,在所有的 @AfterEach 之前被执行,且只执行一次 |
2、Lombok
注解 |
说明 |
@Setter |
setter 方法 |
@Getter |
getter 方法 |
@Data |
setter 和 getter 方法 |
@AllArgsConstructor |
全参构造器 |
@NoArgsConstructor |
无参构造器 |
@Slf4j |
日志对象 |
3、Mybatis
Mybatis 总结 Mybatis-Plus
注解 |
说明 |
@Param("rename") |
写在方法的参数列表上,起别名 |
@Insert("sql") |
增 |
@Delete("sql") |
删 |
@Update("sql") |
改 |
@Select("sql") |
查 |
@Results({...}) 配合 @Result 使用 |
结果集封装 |
@One(select="类.方法") |
结果集封装 |
@Many(select="类.方法") |
结果集封装 |
@Result(id = true / false, property = "", javaType = .class, column = "", one = @One(), many = @Many(), fetchType = FetchType.) |
结果集封装 |
@CacheNamespace |
在 Mapper 接口中配置二级缓存 |
@Mapper |
使用在 mapper 层类(mapper 接口)上用于实例化 Bean |
@MapperScan("com.zzw.mapper") |
如果想让每个接口都变成实现类,需要在每个接口类上加上 @Mapper 注解,太麻烦 在 Springboot 启动类上面添加 @MapperScan("com.zzw.mapper") |
| * fetchType = FetchType.LAZY 表示懒加载 |
| * fetchType = FetchType.EAGER 表示立即加载 |
| * fetchType = FetchType.DEFAULT 表示使用全局配置 |
| public interface OrderMapper { |
| @Select("select * from orders") |
| @Results({ |
| @Result(id = true, column = "id", property = "id"), |
| @Result(column = "ordertime", property = "ordertime"), |
| @Result(column = "money", property = "money"), |
| @Result(property = "user", javaType = User.class, column = "uid", |
| one = @One(select = "com.lagou.mapper.UserMapper.findById", fetchType = FetchType.EAGER)) |
| }) |
| public List<Order> findAllWithUser(); |
| } |

4、Spring
4.1、IOC
IOC
控制反转:对象不再自己创建,而是直接向 Spring 要

注解 |
说明 |
@Component |
使用在类上用于实例化 Bean |
@Controller |
使用在 controler 层类上用于实例化 Bean |
@Service |
使用在 service 层类上用于实例化 Bean |
@Repository |
使用在 mapper 层类上用于实例化 Bean |
@Mapper |
使用在 mapper 层类(mapper 接口)上用于实例化 Bean(Mybatis 的) |
@Bean |
使用在方法上,标注将该方法的返回值存储到 Spring 容器中(如果当前方法需要参数,它会自动在容器中查找装配) |
@Scope |
标注 Bean 的作用范围,singleton、prototype |
@Lazy |
Bean 是否懒加载,Spring 会在使用这个对象的时候,进行对象的创建 |
@PostConstruct |
使用在方法上,标注该方法是 Bean 的初始化方法(Java 的) |
@PreDestroy |
使用在方法上,标注该方法是 Bean 的销毁方法(Java 的) |
| * 在 Spring 中,对于 bean 支持五种作用范围 |
| |
| - singleton 单例模式,即对象只创建一次,然后一直存在(默认) |
| 容器初始化,对象创建;容器销毁,对象销毁 |
| - prototype 多例模式,即每次获取 bean 的时候,IOC 都给我们创建一个新对象 |
| 每一次调用 getBean 获取对象的时候,对象创建 |
| 对象销毁是由对象调用线程所在的垃圾回收期负责,Spring 不知道这个销毁的时间节点 |
| - 面试 |
| - request web 项目中,Spring 创建一个 Bean 的对象,将对象存入到 request 域中(一次请求) |
| - session web 项目中,Spring 创建一个 Bean 的对象,将对象存入到 session 域中(一次会话) |
| - globalSession 用于分布式 web 开发中,创建的实例绑定全局 session 对象 |
| |
| 1、构造方法 |
| 初始化之前 postProcessBeforeInitialization(BeanPostProcessor) |
| 2、初始化 afterProperitesSet(InitializingBean)、init-method |
| 初始化之后 postProcessAfterInitialization(BeanPostProcessor) |
| 3、销毁 destroy(DisposableBean)、destroy-method |
4.2、DI
依赖注入
注解 |
说明 |
@Autowired |
使用在字段上用于根据类型依赖注入 |
@Qualifier |
结合 @Autowired 一起使用,用于根据名称进行依赖注入 |
@Resource |
相当于 @Autowired + @Qualifier,按照名称进行注入(Java 的) |
@Value |
注入普通属性(8 + String)(注入配置文件) |
@PropertySource("db.properties") + @Value("${jdbc.url}") |
用于加载 .properties 文件中的配置 |
4.3、AOP
AOP
面向切面
注解 |
说明 |
@Component |
指定是组件 |
@Aspect |
指定这个组件是 AOP 的增强类 |
@Order |
设置增强类优先级 |
@Pointcut |
指定方法为切入点 |
@Before |
前置通知 |
@AfterReturning |
后置通知 |
@AfterThrowing |
异常通知 |
@After |
最终通知 |
@Around |
环绕通知 |
@EnableAspectJAutoProxy(proxyTargetClass = true) |
0 xml 配置,切面自动代理,AOP 自动生成代理对象 告知 Spring 基于注解进行 AOP 编程,默认 JDK 代理,true 为 CGLib 代理 Spring AOP 代理默认实现 JDK,Springboot A0P 代理默认实现 Cglib |
通过一个表达式来确定 AOP 要增强的是哪个或者那些方法
语法结构:execution( [权限修饰符] [返回值类型] [类的全路径名] [方法名] [参数列表] )(权限修饰符可以省略)
| execution(* com.zzw.dao.UserDaoImpl.add(..)) |
| execution(* com.zzw.dao.UserDaoImpl.*(..)) |
| execution(* com.zzw.dao.*.*(..)) |
| execution(* com.zzw.dao.*.add(..)) |
| execution(* com.zzw.dao.*.add*(..)) |
| execution(* *(..)) |
| - 前置通知(before) 在切点运行 "之前" 执行 |
| - 后置通知(after-returning) 在切点正常运行结束 "之后" 执行 |
| - 异常通知(after-throwing) 在切点 "发生异常" 的时候执行 |
| - 最终通知(after) 在切点的 "最终" 执行 |
| try { |
| 前置通知(before) |
| |
| |
| |
| 后置通知(after-returning) |
| } catch (Exception e) { |
| 异常通知(after-throwing) |
| } finally { |
| 最终通知(after) |
| } |
| try { |
| begin(); |
| |
| obj = pjp.proceed(); |
| |
| commit(); |
| } catch (Throwable e) { |
| rollback(); |
| } finally { |
| close(); |
| } |
| return obj; |
4.4、事务
Spring 事务
注解 |
说明 |
@Transactional |
加在类上,代表类中的所有方法都添加了事务控制 放在方法上,就是仅仅对当前方法增加了事务控制 |
@EnableTransactionManagement |
开启事务注解 |
4.5、配置
注解 |
说明 |
@Configuration |
用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解 |
@Import(DbConfig.class) |
用于导入其他配置类 |
@ComponentScan("com.itheima") |
用于指定 Spring 在初始化容器时要扫描的包 |
@Bean |
使用在方法上,标注将该方法的返回值存储到 Spring 容器中 如果当前方法需要参数,它会自动在容器中查找装配 |
@PropertySource("db.properties") + @Value("${jdbc.url}") @PropertySource("classpath:jdbc.properties") |
用于加载 .properties 文件中的配置 |
| @Configuration |
| @Import(DbConfig.class) |
| @ComponentScan("com.zzw") |
| public class SpringConfig { |
| |
| @Bean |
| public JdbcTemplate jdbcTemplate(DataSource dataSource) { |
| JdbcTemplate jdbcTemplate = new JdbcTemplate(); |
| jdbcTemplate.setDataSource(dataSource); |
| return jdbcTemplate; |
| } |
| } |
| |
| ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); |
| @PropertySource("db.properties") |
| public class DbConfig { |
| |
| @Value("${jdbc.driver}") |
| private String driver; |
| @Value("${jdbc.url}") |
| private String url; |
| @Value("${jdbc.username}") |
| private String username; |
| @Value("${jdbc.password}") |
| private String password; |
| |
| @Bean |
| public DruidDataSource dataSource() { |
| DruidDataSource dataSource = new DruidDataSource(); |
| dataSource.setDriverClassName(driver); |
| dataSource.setUrl(url); |
| dataSource.setUsername(username); |
| dataSource.setPassword(password); |
| return dataSource; |
| } |
| } |
| |
| jdbc.driver=com.mysql.jdbc.Driver |
| jdbc.url=jdbc:mysql:///spring |
| jdbc.username=root |
| jdbc.password=root |
5、SpringMVC
SpringMVC
文件上传、异常处理、拦截器
注解 |
说明 |
@Controller |
标注类作为控制器(处理器) |
@RequestMapping |
用于建立请求 URL 和处理请求方法之间的对应关系,路径、方法、参数、请求头 |
@PostMapping、@DeleteMapping、@PutMapping、@GetMapping |
对请求方式进行控制,增删改查 |
@CrossOrigin(origins = {"http://localhost:3000"}) |
允许跨域 |
---------------------------------------------------------- |
---------------------------------------------------------- |
@PathVariable |
可以获取请求 URL 路径中的参数值,Restful 风格 |
@RequestParam |
处理参数名称,默认值、非必须、接收 List |
@RequestBody |
标注在参数前面,用于将请求体(get 没有请求体)中的 Json 数据转换成指定的对象 如果没有具体的实体类来接收参数,就要用 Map 来接收 |
@RequestHeader |
接收请求头,Map<String, String> headers 获取所有请求头、获取指定键的请求头 |
@CookieValue("JSESSIONID") |
获取 Cookie 中的数据 |
@DateTimeFormat(pattern = "yyyy-MM-dd") |
日期类型转换,可以用于方法参数列表和类的属性上(入参) |
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
处理响应 Json 数据的处理,可以用于方法参数列表和类的属性上(出参) |
@ResponseBody |
标注在方法或者类上,表示将方法返回值对象转换成指定的形式(Json / 字符串),直接写回响应 |
@RestController = @Controller + @Responsebody |
返回 Json 数据,不需要在方法前面加 @ResponseBody 注解了 |
@SessionAttributes("username") |
向 request 域存入的 key 为 username 时,同步到 session 域中 |
---------------------------------------------------------- |
---------------------------------------------------------- |
@ControllerAdvice |
要标注在类上,表示当前类是一个全局异常处理器的类 |
@RestControllerAdvice |
要标注在类上,表示当前类是一个全局异常处理器的类,方法返回值自动转 Json |
@ExceptionHandler(Throwable.class) |
标注在方法上,表示当前方法可以处理哪些异常 |
6、Springboot
注解 |
说明 |
@SpringBootApplication |
启动类 |
@SpringBootTest(classes=SpringbootApplication.class) |
测试类 |
@Configuration(proxyBeanMethods = true) |
配置类 |
@ConfigurationProperties(prefix = "datasource") |
读取配置文件信息,来给被标注的类的属性赋值,当前类必须放到容器中才生效 |
@Conditional 条件装配:满足 Conditional 指定的条件,则进行组件注入,@Conditional 下还有很多子注解
Conditional 扩展注解 |
作用(判断是否满足当前指定条件) |
@ConditionalOnJava |
系统的 java 版本是否符合要求 |
@ConditionalOnBean |
容器中存在指定 Bean |
@ConditionalOnMissingBean |
容器中不存在指定Bean |
@ConditionalOnExpression |
满足 SpEL 表达式指定 |
@ConditionalOnMissingClass |
系统中有指定的类 |
@ConditionalOnMissingClass |
系统中没有指定的类 |
@ConditionalOnSingleCandidate |
容器中只有一个指定的 Bean,或者这个 Bean 是首选 Bean |
@ConditionalOnProperty |
系统中指定的属性是否有指定的值 |
@ConditionalOnResource |
类路径下是否存在指定资源文件 |
@ConditionalOnWebApplication |
当前是 web 环境 |
@ConditionalOnNotWebApplication |
当前不是 web 环境 |
@ConditionalOnJndi |
JNDI 存在指定项 |
@ConditionalOnClass |
存在这个类(pom.xml 导入依赖) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步