注解

aop动态代理核心:
一旦开启动态代理 [配置类中的@EnableAspectJAutoProxy(proxyTargetClass=false) -----启动AOP注解 创建代理对象] 一添加
ApplicationContext context =
new AnnotationConfigApplicationContext(SpringConfig.class);
DeptService deptService = context.getBean(DeptService.class);
获得的DeptService 的对象 结果就是代理对象 [可以打印结果进行验证]

1.自定义注解
@interface ----创建自定义注解
@Retention(RetentionPolicy.RUNTIME) —控制注解的生命周期
@Target({ElementType.METHOD,ElementType.TYPE,ElementType.FIELD}) —注解的作用对象: 方法有效 类有效 TYPE
2.想要让程序在其他的注解(比如@Test)之前执行
@Before


1.mvc三层代码结构注解 ====>注解想要生效,被容器管理,要开启包扫描
@Controller
@Service
MybatisBoot的特殊字符:
搭配QueryWrapper条件构造器使用
> gt < lt = eq
>= ge <= le <>ne
默认链接符: and
@Repository 数据库(映射器) *******mapper在注入的时候,会出现误报错,设置一下或者(加@Repository注解)
@Component ----不知道时用
2.依赖注入(DI)
@Autowired —优先类型,后属性
首先根据属性的类型进行注入,
如果类型不能匹配,则根据属性的名称进行注入
@Qualifier—属性注入
如果添加了@Qualifier(“userServiceA”) 则根据属性名称注入
补充:构造器注入
@NoArgsConstructor —无参
@AllArgsConstructor —全参
3.实体类pojo
@Data — idea里边的小辣椒插件 提供 get/set/toString等方法
@Accessors(chain=true) — 重写set方法,链式加载数据[连续.就行]
MP:要求以面向对象的方式操作数据库.其中对象与表 属性与字段必须映射!!!
@TableName(“demo_user”) — 与数据库的表建立联系
@TableId(type = IdType.AUTO) — 设置主键自增
@TableField(value=“name”,exist=true) ----名称与表一致可以省略[一般不常用]
4.简单的配置类config
@Configuration -----标识我是一个配置类 相当于application.xml
@ComponentScan(“com.jt”) —设定包扫描的路径 ====>作用:让@Controller @Service @Repository等注解想要生效,被容器所管理,等开启包扫描
@EnableAspectJAutoProxy(proxyTargetClass=false) -----启动AOP注解 创建代理对象
在springboot框架中 可以省略这个注解 @SpringBootApplication注解中已包含
5.用properties文件给属性赋值,配置类config (不能写死,动态赋值的一些参数,要写在proper文件里)
@PropertySource(value=“classpath:/properties”,encoding=“utf-8”) --属性赋值的文件路径
@Value —为属性动态传值
@Bean —管理用户对象
1)Spring配置文件写法
2)执行@Bean的方法 将方法名称当做ID,返回值的对象当做value,直接保存到Map集合中
@Bean 应用说明:
1)用于在@Configuration注解描述的类中描述方法
2)此注解描述的方法用于创建一个第三方对象并交给spring管理
3)Spring存储时这个bean时,默认为bean起的名字为方法名
6.AOP切面
@Component —AOP需要被Spring容器管理
@Aspect — 标识该类为AOP切面 -----作用于类上
@Order(2) 数字越低越先执行
@Pointcut
—将切入点表达式,进行抽取时,用该注解
@Pointcut("execution(
com.company.controller..(…))")
public void pointCut() {}

切入点表达式四种类型
	       粗粒度:不常用
		1)bean(“bean的ID)
		2)within(com.jt..*)  ------包下的所有的类
	        细粒度:常用	
		3)execution(* com.jt..*.*(..)) ------com.jt包下的所有包的所有类的所有方法 任意参数
		4)@annotation(包名.注解名)    ----只拦截特定注解的内容

7.AOP的4大通知-------作用于方法上
@Before
@After
@AfterReturning
@AfterThrowing
@Around —环绕通知[常用]
8.SpringBoot主启动类:SpringBootRun
@SpringBootApplication 相当于配置类的 @Configuration + @EnableAspectJAutoProxy(){切面} +开箱即用功能
@MapperScan(“com.jt.mapper”) 相当于配置类的 @ComponentScan(“com.jt”)+@Mapper

9.测试类启动spring容器
@SpringBootTest
10.RestFul风格
@RequestMapping("/demo")
@ResponseBody
/**
* 常规get请求:
* url地址: http://localhost:8090/restFul?id=1&name=tom
* get请求弊端: 如果参数有多个,则key-value的结构需要多份.
* RestFul结构:
* url地址: http://localhost:8090/restFul/{id}/{name}
* 1.参数之间使用/分割
* 2.参数的位置一旦确定,不可更改
* 3.参数使用{}号的形式进行包裹,并且设定形参
* 4.在接收参数时,使用特定的注解取值@PathVariable
*/
常规操作 执行增删改查的操作:
1)新增用户 /insertUser
2)修改用户 /updateUser
3)删除用户 /deleteUser
4)查询用户 /selectUser
RestFul风格优化后:
1)新增用户 /user 请求类型: POST
2)修改用户 /user 请求类型: PUT
3)删除用户 /user 请求类型: DELETE
4)查询用户 /user 请求类型: GET
@RequestMapping("/响应数据库中的具体的某张表的增删改查的所有方法") {一般提取公共的请求}
@GetMapping("/响应某张表的查询方法") 无状态的查询数据请求
@PostMapping("/响应某张表的添加方法") 无状态的添加数据请求
@DeleteMapping("/响应某张表的删除方法") 无状态的删除数据请求
@PutMapping("/响应某张表的修改方法") 无状态的修改数据请求
@5 不常用
@6 不常用
@7 不常用
@8 不常用
@PathVariable — 请求参数 用 / 时 后端用
/ 方式是Resultfull风格
http://localhost:8090/consumer/doFindById/10
@GetMapping("/consumer/doFindById/{id})
@RequestParam— 请求参数 用 ? 时 后端用
?方式使用的默认注解,加不加都行,可以省略
http://localhost:8090/consumer/doFindById?id=30
@GetMapping("/consumer/doFindById")
案例:
@Controller
public class RestFulController {
@RequestMapping("/restFul/{id}/{name}")
public String restFul(@PathVariable Integer id,
@PathVariable String name){
System.out.println(“获取参数:”+id+"|"+name);
return “success”;
}

@CrossOrigin  允许当前类的所有方法执行跨域操作  默认为*  允许所有的服务器(网址访问)
@RestController  ==> @Controller + @ResponseBody
									ajax提交数据,,Json字符串							
@RequestBody  将json串转化为对象  
				---post与put : RestFul风格传参,不需要此注解  
				---delete与get 不需要此注解
@RestControllerAdvice   ----定义全局异常的处理,拦截Controller层  返回Json串
@ExceptionHandler({RuntimeException.class,算术异常.class,io异常.class})    
@Transactional    对方法进行事务的控制 (原子性,一致性,隔离性,持久)
	作用在方法上:----方法里的所有程序,一但有错误,就会回滚,不会出现,错误之前执行成功,错误之后执行失败
	体现事务的原子性,这个方法里的所有东西是一个{最小单位的}整体,不能在被分割

@Request请求的三种方式
@RequestPart 文件
@RequestBody json串
@RequestParam 传参数时用

微服务:springCloud包的注解
远程调用的客户端接口的注解
@FeignClient(name=“远程调用服务名”)
微服务的主启动类的注解
@EnableDiscoveryClients -------- 启动服务发现机制(可选)
@EnableFeignClients ------- 启动 feign方式调用机制
暂时未知
@LoadBalanced -------- 注解描述RestTemplate对象时,表示让restTemplate具备了负载均衡的特性

loadBalancerClient.choose(“服务名称”)
/**
* 通过loadBalancerClient获取服务实例,然后构建url,再通过
* restTemplate进行访问,可以实现负载均衡,优势是直观,但代码量
* 稍微多一些.
* @return
*/
@GetMapping("/consumer/doRestEcho2")
public String doRestLoadBalancerClientEcho(){
//基于服务名获取服务实例 (不同服务实例端口肯定不同),构建url
ServiceInstance serviceInstance=//8081,8082
loadBalancerClient.choose(“nacos-provider”);
String serviceIp=serviceInstance.getHost();//ip
int servicePort=serviceInstance.getPort();//port
String url=String.format(“http://%s:%s/provider/echo/%s”,serviceIp,servicePort,appName);
//向服务提供方发起http请求,获取响应数据
return restTemplate.getForObject(
url, //要请求的服务的地址
String.class); //String.class为请求服务的响应结果类型(responseType)
}

 @SentinelResource
         用于定义资源,并提供可选的异常处理和 fallback 配置项。
	 包含以下属性:
		value:资源名称,必需项(不能为空)
		entryType:entry 类型,可选项(默认为EntryType.OUT)
    @RefreshScope      //动态刷新参数 @Value里边的参数,动态赋予logLever
		资源重新加载 : 假如配置信息发生变化,则对url链接的资源进行访问时,会重新构建对象
  		public class  ChongQi{  //此对象只创建一次
		 @Value("${logging.level.com.cy:error}")    :error  动态初始化:给的默认值  
   		 	      private String logLevel;

mapper接口 ----继承---->BaseMapper

public interface DemoUserMapper extends BaseMapper<pojo实体对象> { 
	1)可以使用 父类 BaseMapper接口里边特有的方法  [常用]
	2)也可以自己定义 增方法,删方法,改方法,查方法
}

queryWrapper构造器

因为mapper接口继承了BaseMapper,没法自己写  where条件的子句,所以用 new QueryWrapper<>() 构造器去充当where子句
queryWrapper  条件构造器  拼接where条件的.
 原则: 根据对象中不为null的属性拼接where条件

Mybatis的Sql语句: select * from demo_user where age > 18 and sex=“女”
MybatisBoot,特殊字符:
> gt < lt = eq
>= ge <= le <>ne
默认链接符: and

案例
1)有条件
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.eq(“sex”,“男”)
.orderByDesc(“id”);
List userlist = userMapper.selectList(wrapper);
System.out.println(userlist);
2)不需要条件,则不需要构造器, 参数为null值:
List userlist = userMapper.selectList(null);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值