@component:组件:
把@component加在类上,则设置该类为spring管理的bean。@Component注解括号中如果不起名称,会有一个默认值就是当前类名首字母小写,所以也可以按照名称获取
@Component注解,还衍生出了其他三个注解:
- @Controller:主要用在表现层
- @Service:主要用在业务层
- @Repository:主要用在数据层
@Configuration和@ComponentScan:
- 在配置类上添加@Configuration注解,将其标识为一个配置类,替换applicationContext.xml
- 在配置类上添加包扫描注解@ComponentScan替换<context:component-scan base-package=“”/>用于扫描设置为bean的类
- @ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式
例如:
@Configuration
@ComponentScan("要扫描的包路径")
public class SpringConfig {
}
@Scope:
- 在数据层类上方添加@Scope(prototype)则创建出来的bean对象为非单例对象,默认值singleton(是单例)
@PostConstruct和@PreDestroy
- 在数据层类中的方法上添加@PostConstruct则会将此方法定义为此bean的生命周期中的init初始化方法
- 在数据层类中的方法上添加@PreDestroy则会将此方法定义为此bean的声明周期中的destory销毁方法
@Autowired:自动装配
// 例如
@Autowired
private BookDao bookDao;
- @Autowired可以写在属性上,也可也写在setter方法上,最简单的处理方式是写在属性上并将 setter方法删除掉
- @Autowired是按照类型注入,如果出现多个实现类则只按照类型会出错,此时可以在要装配的bean上起个名字例如:@Repository(“book”),则此时的Autowired会根据属性名称查找和属性名称一样的实现类进行自动装配。或者在@Autowired下添加@Qualifier(“bean上起的名字”)进行自动装配例如:
@Autowired
@Qualifier("book")
private BookDao bookDao;
@Value:对简单类型进行自动注入:
@Value("jjw")
private String name;
即相当于给name赋值一个默认值为jjw
在配置类的上边添加一个@PropertySource(“配置文件”) 则在此处的@Value(${“配置文件中的键”}) 就可以使用配置文件中的值了。例如:
@Configuration
@ComponentScan("要扫描的包路径")
@PropertySource("jdbc.properties")
public class SpringConfig {
}
@Value("${jdbc.properties中的属性的键}")
需要注意的是如果配置文件过多则用数组包括起来
@Bean
管理第三方bean即在配置类中创建一个方法,此方法返回一个第三方的一个对象。在此方法的上边写上@Bean即将此对象封装成了bean对象。例如:
@Configuration
public class SpringConfig {
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
}
或者将dataSource这个方法写到一个专门的类中,并在上边这个配置类中使用@Import({dataSource所在类的类名.class})导入即可。注意:
- @Import参数需要的是一个数组,可以引入多个配置类。
- @Import注解在配置类中只能写一次,下面的方式是不允许的
@RunWith用于spring整合junit
- @RunWith(SpringJUnit4ClassRunner.class) 这个是固定的是设置类运行器,在pom.xml中引入Junit和spring-test后可以直接导入SpringJUnit4ClassRunner的
- @ContextConfiguration(classes = {你的配置类名.class}) //设置Spring环境对应的配置类 例如:
//设置类运行器
@RunWith(SpringJUnit4ClassRunner.class)
//设置Spring环境对应的配置类
@ContextConfiguration(classes = {SpringConfiguration.class}) //加载配置类
名称 @RunWith
类型 测试类注解
位置 测试类定义上方
作用 设置JUnit运行器
属性 value(默认):运行所使用的运行期
名称 @ContextConfiguration
类型 测试类注解
位置 测试类定义上方
作用 设置JUnit加载的Spring核心配置
属性 classes:核心配置类,可以使用数组的格式设定加载多个配置类
locations:配置文件,可以使用数组的格式设定加载多个配置文件名称
注意类的上边配置了上边两个内容后,类中的方法就可以就可以进行测试了
定义切入点:@Pointcut、制作切面:@Before、将通知类配给容器并标识其为切面类:@Aspect、开启注解格式AOP功能:@EnableAspectJAutoProxy
举例如下:
@Component
@Aspect
public class MyAdvice {
@Pointcut("execution(void com.itheima.dao.BookDao.update())")
private void pt(){}
@Before("pt()")
public void method(){
System.out.println(System.currentTimeMillis());
}
}
@Configuration
@ComponentScan("com.jjw")
@EnableAspectJAutoProxy
public class SpringConfig { }
名称 @EnableAspectJAutoProxy
类型 配置类注解
位置 配置类定义上方
作用 开启注解格式AOP功能
名称 @Aspect
类型 类注解
位置 切面类定义上方
作用 设置当前类为AOP切面类
名称 @Pointcut
类型 方法注解
位置 切入点方法定义上方
作用 设置切入点方法
属性 value(默认):切入点表达式
名称 @Before
类型 方法注解
位置 通知方法定义上方
作用 设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前运行
@Around(“pt()”)
public void around(ProceedingJoinPoint pjp) throws Throwable{
System.out.println(“around before advice …”); // 前
pjp.proceed();
System.out.println(“around after advice …”); // 后
}
通配符解释:
* :单个独立的任意符号,可以独立出现,也可以作为前缀或者后缀的匹配符出现
execution(public * com.jjw..UserService.find())
匹配返回值为任意类型的com.jjw包下的任意包中的UserService类或接口中所有find开头的带有一个参数的
方法..
:多个连续的任意符号,可以独立出现,常用于简化包名与参数的书写
execution(public User com…UserService.findById(…))
匹配返回值为User对象的com包下的任意包中的UserService类或接口中所有名称为findById的参数任意个的方法
+:专用于匹配子类类型
execution( *…Service+.(…))
匹配返回值为任意类型下的所有以Service结尾的接口的子类,参数可以有任意多个。 这个使用率较低,描述子类的,咱们做JavaEE开发,继承机会就一次,使用都很慎重,所以很少
用它。*Service+,表示所有以Service结尾的接口的子类。
名称 @After
类型 方法注解
位置 通知方法定义上方
作用 设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法后运行
名称 @AfterReturning
类型 方法注解
位置 通知方法定义上方
作用 设置当前通知方法与切入点之间绑定关系,当前通知方法在原始切入点方法正常执行完毕后
执行
名称 @AfterThrowing
类型 方法注解
位置 通知方法定义上方
作用 设置当前通知方法与切入点之间绑定关系,当前通知方法在原始切入点方法运行抛出异常后
执行
名称 @Around
类型 方法注解
位置 通知方法定义上方
作用 设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前后运行
@Transactional事务操作:
可以写在接口类上、接口方法上、实现类上和实现类方法上
写在接口类上,该接口的所有实现类的所有方法都会有事务
写在接口方法上,该接口的所有实现类的该方法都会有事务
写在实现类上,该类中的所有方法都会有事务
写在实现类方法上,该方法上有事务
建议写在实现类或实现类的方法上
名称 @Transactional
类型 接口注解 类注解 方法注解
位置 业务层接口上方 业务层实现类上方 业务方法上方
作用 为当前业务层方法添加事务(如果设置在类或接口上方则类或接口中所有方法均添加事务)
名称 @EnableTransactionManagement
类型 配置类注解
位置 配置类定义上方
作用 设置当前Spring环境中开启注解式事务支持
名称 @RequestMapping
类型 类注解或方法注解
位置 SpringMVC控制器类或方法定义上方
作用 设置当前控制器方法请求访问路径
相关属性 value(默认),请求访问路径
名称 @ResponseBody
类型 类注解或方法注解
位置 SpringMVC控制器类或方法定义上方
作用 设置当前控制器方法响应内容为当前返回值,无需解析即如果写在方法上,则将方法的返回内容作为响应体返回给前端
名称 @RequestParam
类型 形参注解
位置 SpringMVC控制器方法形参定义前面
作用 绑定请求参数与处理器方法形参间的关系,就是将前端请求的参数和后端接口传递的参数一一对应
相关参数 required:是否为必传参数
defaultValue:参数默认值
名称 @EnableWebMvc
类型 配置类注解
位置 SpringMVC配置类定义上方
作用 开启SpringMVC多项辅助功能、比如前端传递进来的JSON格式数据
名称 @RequestBody
类型 形参注解
位置 SpringMVC控制器方法形参定义前面
作用 将请求中请求体所包含的数据传递给请求参数,此注解一个处理器方法只能使用一次。例如前端发送的为JSON格式的数据时用 @RequestBody对应的参数接收
名称 @DateTimeFormat
类型 形参注解
位置 SpringMVC控制器方法形参前面
作用 设定日期时间型数据格式
相关属性 pattern:指定日期时间格式字符串例如:前端传递的为2020/02/08 则后端接收的应为@DateTimeFormat(pattern=“yyyy/MM/dd”) Date date,若前端传递的为 2021-02-02 9:09:09则后端接收的应为@DateTimeFormat(pattern=“yyyy-MM-dd HH:mm:ss”) Date date.
名称 @PathVariable
类型 形参注解
位置 SpringMVC控制器方法形参定义前面
作用 绑定路径参数与处理器方法形参间的关系,要求路径参数名与形参名一一对应
名称 @RestController
类型 类注解
位置 基于SpringMVC的RESTful开发控制器类定义上方
作用 设置当前控制器类为RESTful风格,
等同于@Controller与@ResponseBody两个注解组合功能
名称 @GetMapping @PostMapping @PutMapping @DeleteMapping
类型 方法注解
位置 基于SpringMVC的RESTful开发控制器方法定义上方
作用 设置当前控制器方法请求访问路径与请求动作,每种对应一个请求动作,
例如@GetMapping对应GET请求
相关属性 value(默认):请求访问路径
名称 @RestControllerAdvice
类型 类注解
位置 Rest风格开发的控制器增强类定义上方
作用 为Rest风格开发的控制器类做增强
说明:此注解自带@ResponseBody注解与@Component注解,具备对应的功能
名称 @ExceptionHandler
类型 方法注解
位置 专用于异常处理的控制器方法上方
作用 设置指定异常的处理方案,功能等同于控制器方法,
出现异常后终止原始控制器执行,并转入当前方法执行
说明:此类方法可以根据处理的异常不同,制作多个方法分别处理对应的异常
@SpringBootApplication
SpringBoot启动依赖
SpringBoot 在创建项目时,采用jar的打包方式
SpringBoot 的引导类是项目的入口,运行 main 方法就可以启动项目
因为我们在 pom.xml 中配置了 spring-boot-starter-web 依赖,而该依赖通过前面的学习知道它依赖 tomcat ,所以运行 main 方法就可以使用 tomcat 启动咱们的工程。
@Mapper
原因是 Mybatis 会扫描接口并创建接口的代码对象交给 Spring 管理,但是现在并没有告诉 Mybatis 哪个是 dao 接口。而我们要解决这个问题需要在 BookDao 接口上使用 @Mapper
Lombok常见的注解有:
@Setter:为模型类的属性提供setter方法
@Getter:为模型类的属性提供getter方法
@ToString:为模型类的属性提供toString方法
@EqualsAndHashCode:为模型类的属性提供equals和hashcode方法
@Data:是个组合注解,包含上面的注解的功能
@NoArgsConstructor:提供一个无参构造函数
@AllArgsConstructor:提供一个包含所有参数的构造函数
名称 @TableField
类型 属性注解
位置 模型类属性定义上方
作用 设置当前属性对应的数据库表中的字段关系
相关属性:value(默认):设置数据库表字段名称
exist:设置属性在数据库表字段中是否存在,默认为true,此属性不能与value合并使用
select:设置属性是否参与查询,此属性与select()映射配置不冲突
名称 @TableName
类型 类注解
位置 模型类定义上方
作用 设置当前类对应于数据库表关系
相关属性 value(默认):value值要设置为数据库对应的表的名称
名称 @TableId
类型 属性注解
位置 模型类中用于表示主键的属性定义上方
作用 设置当前类中主键属性的生成策略
相关属性 value(默认):设置数据库表主键名称
type:设置主键属性的生成策略,值查照IdType的枚举值
名称 @TableLogic
类型 属性注解
位置 模型类中用于表示删除字段的属性定义上方
作用 标识该字段为进行逻辑删除的字段
相关属性 value:逻辑未删除值
delval: 逻辑删除值
@ConfigurationProperties(prefix = “datasource”)
- 使用@ConfigurationProperties注解绑定配置信息到封装类中
- 封装类需要定义为Spring管理的bean,否则无法进行属性注入
@LoadBalanced
负载均衡注解
@RefreshScope
在@Value注入的变量所在类上添加注解@RefreshScope
@EnableFeignClient
在启动类上添加注解开启Feign的功能
@FeignClient(“userservice”)
服务名称:userservice
@RequestHeader
获取请求头参数