Spring注解开发的注解

本文详细介绍了Spring Boot中的配置注解如@Configuration、@Component和MVC设计思想,以及MyBatis的参数注解如@Param。涵盖了依赖注入、AOP切面编程和数据库操作的注解技巧。
摘要由CSDN通过智能技术生成

注解开发

基础注解

@Configuration 将当前类标识为配置类

@Bean 将方法的返回值交给spring容器管理

@Component 将当前类,交给Spring容器管理,里边对象的创建是由spring通过反射的机制自动创建对象

@ComponentScan 指定扫描的包路径,可以扫描他的子孙包。用在配置类中。使spring注解有效

@Scope(singleton)默认的单例,不写也是单例

@Scope(prototype)多例,看里面的参数

@Lazy 添加表示改为懒加载

@PostConstruct 在对象创建之后立即调用

@PreDestroy 对象消亡时调用,


依赖注入

@Autowired 在对象中需要属性的注入,一般使用这个注解,可以将spring容器中的对象自动注入到属性里面

注入方式:前提

  1. 默认按照类型注入,如果注入的属性是接口,则自动注入实现类

  2. 按照名称注入(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("包路径") ,所以主启动类会默认扫描本类的包及它的子孙包,子孙类

  1. @EnableAutoConfiguration 启动自动化的配置:加载springBoot-starter-xxx的启动项,当启动类执行时,会开始加载启动项,加载完启动项,其配置便会开始工作

@Data //get()/set()/toString()....等等方法 必须要先下载lombok插件 才可以使用功能

@Accessors(chain = true) //重写了set方法. 可以实现链式的加载

@NoArgsConstructor 自动添加无参构造

@AllArgsConstructor 自动添加全参构造


MyBatis

@Param("里面写key值")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值