注解开发
基础注解
@Configuration 将当前类标识为配置类
@Bean 将方法的返回值交给spring容器管理
@Component 将当前类,交给Spring容器管理,里边对象的创建是由spring通过反射的机制自动创建对象
@ComponentScan 指定扫描的包路径,可以扫描他的子孙包。用在配置类中。使spring注解有效
@Scope(singleton)默认的单例,不写也是单例
@Scope(prototype)多例,看里面的参数
@Lazy 添加表示改为懒加载
@PostConstruct 在对象创建之后立即调用
@PreDestroy 对象消亡时调用,
依赖注入
@Autowired 在对象中需要属性的注入,一般使用这个注解,可以将spring容器中的对象自动注入到属性里面
注入方式:前提
-
默认按照类型注入,如果注入的属性是接口,则自动注入实现类
-
按照名称注入(key),一般不用
@Qualifier 有参数,和@Autowired 一起使用。里边可以传id的名字 。如果有多个对象的话使用
MVC 三层设计思想
@Controller 分层中控制层的注解,为了让程序员开发更有层级概念 相当于@Component 交给springMVC管理
@Service 分层中业务层的注解,为了让程序员开发更有层级概念 相当于@Component
@Repository 分层中持久层的注解,为了让程序员开发更有层级概念 里面包含了@Component
@value("${}") ,固定写法,springel表达式,缩写spel表达式。通过key动态获取spring容器中的value。只能给基本类型赋值。
@PropertySource(value="classpath:/user.properties",encoding = "UTF-8") 代表resources的根目录,encoding 后面的是避免中文乱码
@Aspect 表示这个类是个切面
@Pointcut 切入点表达式
@Before("pointCut()") 前置通知:只要满足了切入点表达式就执行这个。在目标方法执行之前执行
@EnableAspectJAutoProxy ,默认为JDK代理,开启AOP
@EnableAspectJAutoProxy(proxyTargetClass = true) 把他的参数改成true,便成了CGLib代理
@AfterReturning("pointCut()") 后置通知:在目标方法执行后执行
@AfterThrowing("pointCut()") 异常通知:目标方法执行报错后执行该方法
@After("pointCut()") 最终通知:目标方法之后都要执行的通知
@Around("pointCut()") 环绕通知(重点!!):在目标方法执行前后都要执行,就是控制方法
@Order(1) 如果有多个环绕通知,用这个注解,代表着是这个环绕通知时第一个执行,可以传参数
@Pointcut 切入点表达式
bean表达式
@Pointcut("bean(userServiceImpl)") 切入点表达式: 判断当前id是不是userServiceImpl
within表达式
@Pointcut("within(com.jt.service.*)") 拦截service包中所有类
@Pointcut("within(com.jt.service.UserServiceImpl)") 拦截指定目录的类
@Pointcut("within(com.jt.service..*)") 两个点代表的拦截所有包下的所有类
上边两个表达式 粒度粗,一般不使用
execution表达式 粒度较细,可以按照方法参数进行匹配
@Pointcut("execution(返回值类型 包名.类名.方法名(参数列表))") 如下
@Pointcut("execution(* com.jt.service.UserServiceImpl.addUser(String))")
@Pointcut("execution(* com.jt.service.. * . * (..))") 任意返回值,service包下所有类的任意方法的任意返回值
annotation 表达式 可以根据用户自定义的注解进行拦截
@Pointcut("@annotation(com.jt.anno.Why)") 标记这个注解下的方法,创建代理对象
@ResponseBody //把对象转为JSON串
@RequestBody //把JSON串转为对象
@RequestMapping("/findJSON") 来映射URL 路径
@ReatController(定义在类上,可以添加前缀-通常是业务名) = @Controller+@ResponseBody
@CrossOrigin 定义在类上,表示可以跨域操作
@PostMapping("/savaUser") 使用post请求的注解
@GetMapping("/savaUser") 使用get请求的注解
@DeleteMapping("/savaUser") 使用delete请求的注解
@PutMapping("/savaUser") 使用put请求的注解
@SpringBootApplication 主启动类,源码包含了@ComponentScan("包路径") ,所以主启动类会默认扫描本类的包及它的子孙包,子孙类
-
@EnableAutoConfiguration 启动自动化的配置:加载springBoot-starter-xxx的启动项,当启动类执行时,会开始加载启动项,加载完启动项,其配置便会开始工作
@Data //get()/set()/toString()....等等方法 必须要先下载lombok插件 才可以使用功能
@Accessors(chain = true) //重写了set方法. 可以实现链式的加载
@NoArgsConstructor 自动添加无参构造
@AllArgsConstructor 自动添加全参构造
MyBatis
@Param("里面写key值")