Annotation个人纪录笔记(持续更新中)

it2025-12-10  6

Annotation个人笔记

前言***一、常见***:7个1.1、元注解1.1.1、@Retention()1.1.2、@Target() 1.2、@AliasFor()1.3、@Override1.4、@SupperssWarnings1.5、@Deprecated1.6、@Documented ***二、Servlet***:2个2.1、@WebServlet()2.2、@WebFilter() ***三、IOC***:8个3.1、@Component3.1.1、@Controller3.1.2、@Service3.1.3、@Repository 3.2、@Scope()3.3、@Lazy()3.4、@PostConstruct3.5、@PreDestroy ***四、DI***:4个4.1、@Value()4.2、@Autowired4.3、@Qualifier()4.4、@Resource() ***五、Test(集成JUnit)***:2个5.1、@RunWith()5.2、@ContextConfiguration() ***六、AOP***:8个6.1、@Aspect6.2、@Order()6.3、@Pointcut()6.4、@Before()6.5、@AfterReturning()6.6、@Around()6.7、@AfterThrowing()6.8、@After() ***七、事务***:1个7.1、@Transactional() ***八、SpringMVC***:10个8.1、@RequestMapping()8.1.1、@GetMapping()8.1.2、@PostMapping()8.1.3、@PutMapping()8.1.4、@DeleteMapping() 8.2、@RequestParam()8.3、@PathVariable()8.4、@CookieValue()8.5、@RequestHeader()8.6、@SessionAttribute(s) ***九、Json***:9个9.1、@RequestBody9.2、@ResponseBody9.3、@RestController9.4、@JsonFormat()9.5、@DateTimeFormat()9.6、@JsonProperty()9.7、@JsonIgnore9.8、@JsonInclude()9.9、@JsonSerialize ***十、FastJson***:1个10.1、JSONField() ***十一、Error***:2个11.1、@ControllerAdvice11.2、@ExceptionHandler() ***十二、跨域请求***:1个12.1、@CrossOrigin() ***十三、MyBatis***:10个13.1、@Param13.2、@Insert13.3、@Delete13.4、@Update13.5、@Select13.6、@SelectKey()13.7、@Options()13.8、返回值相关13.8.1、@ResultMap13.8.2、@Results13.8.3、@Result ***十四、 springBoot***:9个14.1、@SpringBootApplicatin14.2、@SpringBootConfiguration【`重点理解`】14.3、@EnableAutoConfiguration【`重点理解`】14.4、@ComponentScan14.5、@Configuration14.6、@ConfigurationProperties()14.7、@Bean14.8、@MapperScan()14.9、@ServletComponentScan()【`了解`】 ***十五、JPA***:6个15.1、@Table()15.2、@Entity15.3、@Query15.4、@GeneratedValue()15.5、@Id15.6、@Column ***十六、Redis***:4个16.1、@EnableCaching16.2、@Cacheable()16.3、@CachePut()16.4、@CacheEvict() ***十七、RabbitMQ***:2个17.1、@RabbitListener17.2、@RabbitHandler【`了解,不常用`】 ***十八、SpringCloud***:14个18.1、Eureka18.1.1、@EnableEurekaServer18.1.2、@EnableEurekaClient18.1.3、@EnableWebSecurity 18.2、Ribbon18.2.1、@LoadBalanced 18.3、Feign18.3.1、@EnabelFeignClients18.3.2、@FeignClient() 18.4、Hystrix18.4.1、@EnableCircuitBreaker18.4.2、@EnableHystrixDashboard18.4.3、@HystrixCommand()18.4.4、@HystrixProperty18.4.5、@CatchResult18.4.6、@CatchRemove18.4.7、@CatchKey 18.5、Zuul18.5.1、@EnableZuulProxy *十九、lombok*:9个19.1、@Data19.2、@Getter19.3、@Setter19.4、@RequiredArgsConstructor19.5、@ToString19.6、@EqualsAndHashCode19.7、@AllArgsConstructor19.8、@NoArgsConstructor19.9、@NonNull

前言

该笔记中的所有注解类型,只举例了最常用的,而不一定是全部的类型

一、常见:7个

1.1、元注解

用来描述注解的注解

1.1.1、@Retention()

类型:类作用:指定注解可以保留的域。取值:详情内容请参阅 java.lang.annotation.RetentionPolicy CLASS:注解记录在class⽂件中,运⾏Java程序时, JVM不会保留,此为默认值。RUNTIME:注解记录在 class⽂件中,运⾏Java程序时,JVM会保留,程序可以通过反射获取该注释SOURCE: 编译时直接丢弃这种策略的注释。

1.1.2、@Target()

类型:类作用:指定注解用于修饰类中的哪个成员(也就是本笔记中的类型)取值:详情内容请参阅 java.lang.annotation.ElementType 枚举类 TYPE:类、接口(包括注解)、枚举FIELD:属性(包括枚举常量)METHOD:方法(包括注解方法)PARAMETER:参数CONSTRUCROT:构造函数LOCAL_VARIABLE:局部变量ANNOTATION_TYPE:注解PACKAGE:包TYPE_PARAMETER:类型参数,1.8后出现TYPE_USE:类型使用,1.8后出现

1.2、@AliasFor()

类型:方法作用:起别名取值:别名的名称

1.3、@Override

类型:方法作用:声明该方法是由父类继承后自身重写的

1.4、@SupperssWarnings

类型:几乎所有类型作用:抑制编译警告取值:unchecked、rawtypes、all…

1.5、@Deprecated

类型:几乎所有类型作用:将所修饰的代码变为过时代码

1.6、@Documented

类型:注解作用:可以理解为给注解类型添加一个javadoc也就是文档注释类型

二、Servlet:2个

2.1、@WebServlet()

类型:类作用:定义java类能被服务器访问到的规则取值:/路径注:被注解的类需要继承javax.servlet.http.HttpServlet类

2.2、@WebFilter()

类型:类作用:当访问服务器的某些资源时,过滤器可以把请求拦截下来,完成一些特殊的功能,例如登录验证、统一处理编码格式、敏感字的过滤······取值:/*注:被注解的类需要实现java.servlet.Filter接口,重写dofilter方法

三、IOC:8个

<!--告知spring哪些包中有被注解的类、方法以及属性--> <context:component-scan base-package="包名"/>

3.1、@Component

类型:类

作用:供扫描器扫描以创建对象

取值:

//无取值:默认驼峰命名法类名 @Component //有取值:为取值的值 @Component("userDao")

3.1.1、@Controller

类型:类作用:表现层专用(可读性,非规定)的@Component子注解取值:同@Component

3.1.2、@Service

类型:类作用:业务层专用(可读性,非规定)的@Component子注解取值:同@Component

3.1.3、@Repository

类型:类作用:持久层专用(可读性,非规定)的@Component子注解取值:同@Component

3.2、@Scope()

类型:类

作用:定义当前注解所标记的类在被创建时的单例、多例模式

取值(可以自己直接写,也可以使用静态常量):

//单例模式:销毁时由Spring容器销毁 @Scope(value=ConfigurableBeanFactroy.SCOPE_SINGLETIM) @Scope(value="singleton") //多例模式:销毁时等待JVM销毁 @Scope(value=ConfigurableBeanFactroy.SCOPE_PROTOTYPE) @Scope(value="prototype")

3.3、@Lazy()

类型:类

作用:

延迟加载(lazy init):创建对象时再进行加载,而非工厂准备完毕时就进行加载(不会立即创建对象)可以减少springIOC容器启动的加载时间

取值:

//延迟加载(不写时,默认取值为true): @Lazy //非延迟加载(效果跟不写一摸一样,所以,你懂的~): @Lazy(false)

3.4、@PostConstruct

类型:方法作用:初始化方法,类完全创建完成之后执行的方法(init-method)

3.5、@PreDestroy

类型:方法作用:“销毁”方法,类销毁之前执行的方法(destroy-method)

四、DI:4个

4.1、@Value()

类型:属性作用:给八大基本数据类型以及String类型注入取值:括号内填值或者使用EL表达式("${id}")添加引用(properties或者yml等文件)变量

4.2、@Autowired

类型:属性

作用:引用数据类型注入(按照类型)

取值:无(自动装配:根据类型来实现自动注入值)。

缺点:多态时如果有多个子(实现)类有可能会报异常(NoUniqueBeanDefinitionException):

org.springframework.beans.factory.NoUniqueBeanDefinitionException:No qualifying bean of type 'XXX' available: expected single matching bean but found 2: XXX,XXX

4.3、@Qualifier()

类型:属性,参数作用:引用数据类型注入(按照名称)取值:类名注: 多依赖于Autowired存在,限定要自动注入的bean的id,以弥补Autowired的缺点可以明确引用名称是XXX的对象,括号内填写所需对象的name作为参数注解时,可以绑定固定的属性

4.4、@Resource()

类型:属性作用:引用数据类型注入取值: 按照类型:@Resource按照名称:@Resource(name) 注: 效果等同于@Autowired+@Qualifier(name="")()可以删除,如果删除效果等同于@Autowired,缺点相同

***五、Test(集成JUnit)***:2个

此模块为spring中的测试用注解,@RunWith()和@ContextConfiguration()相互依附存在。

可以免去工厂的创建过程,直接将要测试的组件注入到测试类。

5.1、@RunWith()

类型:类

作用:spring测试用注解

取值:

//默认值,几乎不用,作为spring的注解你用junit? @RunWith(JUint4CalssRunner.class) //spring中负责测试类的运行的值(常用,不对,是必用) @RunWith(SpringJUnit4ClassRunner.class)

5.2、@ContextConfiguration()

类型:类

作用:读取配置文件

取值:

//小提示:使用idea时,写文件名有快捷提示 @ContextConfiguration("classpath:[配置文件的文件名]")

六、AOP:8个

<!--告知spring开启AOP注解功能--> <aop:aspectj-autoproxy/>

执行顺序:

无异常时:环绕前->前置->环绕后->最终->后置有异常时:环绕前->前置->最终->异常

五大通知的方法中可以有一个共同参数,可以得到目标类的对象、方法:

public void 方法名(JoinPoint joinPoint){}

6.1、@Aspect

类型:类作用:声明切面类

6.2、@Order()

类型:类

作用:多个切面切入同一个切入点时定义切面类的执行优先级,效果等同于继承Ordered接口

取值:int类型,取值越小优先级越高

//默认为0,默认时可不写 @Order(-1) public class UserQieMian{}

6.3、@Pointcut()

类型:方法

作用:定义指向切点类的方法(切入点)

取值:切入点表达式

//方法的方法体为空,使用时请删掉中括号及其中内容并注意精确度,包名与类名的通配符可以合并 @Pointcut(value="execution(*[意指返回值] *[意指包名].*[意指类名].*[意指方法名](..[两个点代表所有参数列表]))") public void pointCut(){}

6.4、@Before()

类型:方法

作用:定义切面类前置通知方法

取值:切面方法

@Before(value="[被pointcut所注解的方法名]()") public void before(JoinPoint joinPoint){}

6.5、@AfterReturning()

类型:方法

作用:定义切面类后置通知方法

取值:切面方法和返回值名

//通过returning获取切点的返回值,两个#VALUE#请保持一致 @AfterReturning(value="[被pointcut所注解的方法名]()",returning = "#VALUE#") public void afterReturning(Object #VALUE#){}

6.6、@Around()

类型:方法作用:定义切面类环绕通知方法取值:切面方法 @Before(value="[被pointcut所注解的方法名]()") public Object arond(ProceedingJoinPoint joinPoint){ //TODO:前置(条件)代码 //相当于调用切点方法(不使用则不会环绕) return point.proceed(); //TODO:收尾代码 }

6.7、@AfterThrowing()

类型:方法

作用:定义切面类异常通知方法

取值:切面方法和异常名

//通过throwing获取目标类的异常信息,两个#VALUE#请保持一致 @AfterThrowing(value="#被pointcut所注解的方法名#()",throwing = "#VALUE#") public void afterThrowing(Exception #VALUE#){}

6.8、@After()

类型:方法

作用:定义切面类最终通知方法

取值:切面方法

@After(value="#被pointcut所注解的方法名#()") public void after(){}

七、事务:1个

<!--告知spring和@Transactional在定制事务时,基于txManager=DataSourceTransactionManager--> <tx:annotation-driven transaction-manager="transactionManager"/>

7.1、@Transactional()

类型:类、方法

作用:为类/方法添加事务

取值:

//作用于类上时,对该类中的每个方法都切入事务(有自己的事务控制的方法除外) //作用于方法上时,仅对该方法有效 //参数建议不写(默认) @Transactional(isolation=Isolation.READ_COMMITTED,propagation=Propagation.?????,readOnly=false,rollbackFor=Exception.class,timeout = -1)

八、SpringMVC:10个

<!--告知springMVC哪些包中存在被注解的类--> <context:component-scan base-package="com.qf.controller"/> <!--注册注解开发驱动,简化处理器映射器和处理器适配器,5.几版本后可省略--> <mvc:annotation-driven/> <!--视图解析器,配置访问逻辑视图名--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!--前缀--> <property name="prefix" value="/WEB-INF/jsp/"></property> <!--后缀--> <property name="suffix" value=".jsp"></property> </bean>

8.1、@RequestMapping()

类型:方法、类

作用:设置浏览器访问路径

取值:下例的访问方法:http://localhost:8080/lofty/index

类注解:

//类似于根目录下的父目录,访问该类下的资源时,需要有此路径 @RequestMapping("/lofty")

方法注解:

//value代表url地址 @RequestMapping(value="/index",method=RequestMethod.GET) public String showIndex(){ retrun "jsp页面名"; }

produces属性:解决乱码问题

8.1.1、@GetMapping()

类型:方法作用:@RequestMapping的get方法子注解取值:直接写路径

8.1.2、@PostMapping()

类型:方法作用:@RequestMapping的post方法子注解取值:直接写路径

8.1.3、@PutMapping()

类型:方法作用:@RequestMapping的put方法子注解取值:直接写路径

8.1.4、@DeleteMapping()

类型:方法作用:@RequestMapping的delete方法子注解取值:直接写路径

8.2、@RequestParam()

类型:参数

作用:可以理解为给前端传来的参数起个别名

取值:

//requRired含义可以理解为false时变为可有可无参数 //defaultValue含义为如果没有传则给默认值 public String lofty(@RequestParam("username") String name, @RequestParam(value="uid",required = false) Integer id, @RequestParam(value="uage",defaultValue="18") Integer age) {}

注:需要保证前端传来的参数的类型、长度、格式(比如日期,yyyy/MM/dd HH:mm:ss)完全一致

8.3、@PathVariable()

类型:参数

作用:路径变量(设计动态url)

取值:

//变量名和前端参数键名相同时可以不写括号 @PathVariable(name="路径变量大括号里的值") String id

注:在springCloud中使用时:

8.4、@CookieValue()

类型:参数作用:在请求头中获取单个Cookie,等效getCookie取值:Cookie中的键,可获取其中的值

8.5、@RequestHeader()

类型:参数作用:获取请求头中单个的值,等效getHeader()取值:请求头中的键,可获取其中的值

8.6、@SessionAttribute(s)

类型:类

作用:在session域中开辟新属性,即session的key

取值:

@SessionAttributes(value = {"id","name","password"})

注:可以用session,也可以用model默认存值(此时便不存于request中)

九、Json:9个

使用时需要导入依赖包

<!--jackson-databind:负责Java类与json字符串之间互相转换!--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.6</version> </dependency> <!--上面的依赖了下面的,根据依赖传递特性,下面的依赖不需要写--> <!--<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.6</version> </dependency>-->

9.1、@RequestBody

类型:参数

作用:将前端传来的json字符串转化为相应的对象

取值:

//不写括号默认为true,false时相当于不写该注解 public String lofty(@RequestBody User user){}

注:需要类中的每一个属性名与前端传值的name相同,如果不相同,可参照9.6注解处理

9.2、@ResponseBody

类型:方法作用: 将对象处理成json响应给页面,等效writeValueAsString()将字符串直接响应给页面,等效getWriter().write()

9.3、@RestController

类型:类作用:相当于给类中的每个方法都加了@ResponseBody

9.4、@JsonFormat()

类型:属性

作用:在Bean中将Data属性格式化,使用方式与@DateTimeFormat()相反

取值:

@JsonFormat(pattern="yyyy/MM/dd HH:mm:ss") private Date time;

注:在响应的时候要注意和前端的联系,格式有不一样会报400,仅在json传参中有效

9.5、@DateTimeFormat()

类型:参数【常用】、属性

作用:将前端传来的Date类型的日期格式化

取值:

参数注解

public String lofty(@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") Date time){}

属性注解

@DateTimeFormat(pattern="yyyy/MM/dd HH:mm:ss") private Date time

注:仅仅是前端接收参数,而非后端代码

9.6、@JsonProperty()

类型:属性

作用:用json时起别名,会覆盖原名,只在json字符串中生效

取值:别名,不写值等同于不写该注解

9.7、@JsonIgnore

类型:属性

作用:忽略敏感字段的写入与输出(常用于密码)

9.8、@JsonInclude()

类型:属性

作用:参见取值

取值:

//忽略值为空的字段,长度为0时不会被忽略 @JsonInclude(JsonInclude.Include.NON_NULL) //忽略长度为0或本身为null的字段 //举例: //String s = ""; //List<String> strings = new ArrayList<>(); @JsonInclude(JsonInclude.Include.NON_EMPTY)

9.9、@JsonSerialize

类型:属性作用:浮点数的保留位数设置取值:字节码文件,using= Clazz注:需要设置一个继承JsonSerializer的类以共同实现

十、FastJson:1个

<!--需要导入依赖--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version> </dependency> <!--需要配置于spring-web.xml中--> <mvc:annotation-driven> <mvc:message-concerters> <!--配置fastjson中的消息转换器--> <bean class="FastJsonHttpMessageConverter+回车"> <property name="supportedMediaTypes"> <list> <value>application/json</value> </list> </property> </bean> </mvc:message-concerters> </mvc:annotation-driven>

10.1、JSONField()

类型:属性

作用:同@JsonProperty()

取值:

//设置字段别名 name=?? //设置字段限制 serialzeFeatures=SerialzeFeature.??? //设置敏感字段的忽略 serialize = flase //设置日期格式化 format = "yyyy/MM/dd" //设置钱币相关 serialzeUsing

十一、Error:2个

11.1、@ControllerAdvice

类型:类作用:@Component的子注解,@Controller的增强,多用于全局异常处理取值:参考@Controller

11.2、@ExceptionHandler()

类型:方法

作用:对异常进行处理

取值:想要捕获的字节码文件,效果可认作catch

@ExceptionHandler(Exception.class)

十二、跨域请求:1个

12.1、@CrossOrigin()

类型:方法、类(使该类的所有方法生效)

作用:可以让其他项目进行跨域ajax请求,克服同源策略

取值:

//定义可以被访问的请求地址 origis={"http://localhost:8080","",""...} //定义可以被访问的请求方式 methods={RequestMethod.GET,...}

十三、MyBatis:10个

配置:

于application-dao.xml中: <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/> </bean> 于mybatis-config.xml中(常用): <!-- 打印查询语句 --> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings> <!--配置类型别名--> <typeAliases> <typeAlias type="com.yyg.redis.domain.Msg"/> </typeAliases> <!--配置分页插件--> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql"/> </plugin> </plugins>

13.1、@Param

类型:参数

作用:在多参数的查询语句中,给形参定义一个别名以防止ORM映射失败(就可以不使用它的默认形参,可视为逆向sql中的AS关键字)

取值:别名值

13.2、@Insert

类型:方法

作用:数据库添加语句,格式与xml中相同

取值:sql语句

13.3、@Delete

类型:方法作用:数据库删除语句,格式与xml中相同取值:sql语句

13.4、@Update

类型:方法作用:数据库修改语句,格式与xml中相同取值:sql语句

13.5、@Select

类型:方法作用:数据库查询语句,格式与xml中相同取值:sql语句

13.6、@SelectKey()

类型:方法作用:执行添加语句时获取新增的位置或新增之前的位置取值:(缺一不可) keyProperty:类里对应表主键的属性名keyColumn:表里主键名before:是否在添加之前查询(T/F)statement:sql语句resultType:返回值类型的字节码文件

13.7、@Options()

类型:方法作用:执行添加语句时获取新增的位置或新增之前的位置取值:其他不写默认即可 useGeneratedKeys=true

13.8、返回值相关

类型:均为方法作用:防止ORM映射失败

13.8.1、@ResultMap

作用:引用别的方法上的@Results取值:value=别的方法上的@Results的id

13.8.2、@Results

作用:字段名与属性名不一致时起别名,效果等于数据中的AS取值: id:起个id给@ResultMap用value={@result,…}

13.8.3、@Result

作用:字段名与属性名不一致时起别名,效果等于数据中的AS取值: id:是否为主键column:表中字段名property:类中属性名

十四、 springBoot:9个

14.1、@SpringBootApplicatin

类型:类作用:标记启动类

14.2、@SpringBootConfiguration【重点理解】

类型:类作用:代表启动类就是一个配置类

14.3、@EnableAutoConfiguration【重点理解】

类型:类作用:实现自动装配

14.4、@ComponentScan

类型:类作用:扫描注解标记类取值:一般不需要

14.5、@Configuration

类型:类作用:声明配置类(组件类)取值:一般不需要

14.6、@ConfigurationProperties()

类型:类作用:声明配置类,“协助”@Configuration存在取值:prifix : yml配置的前缀

14.7、@Bean

类型:方法作用:创建实体类,等效于xml中的标签注:在注解所标记的方法内返回需要的类

14.8、@MapperScan()

类型:类(写在启动类上)作用:等同于MapperScannerConfiguration类的作用,扫描mapper包位置取值:basepackages = “com.???”(mapper的位置)

14.9、@ServletComponentScan()【了解】

类型:类(写在启动类上)作用:开启servlet,(针对@WebServlet()注解)取值:basepackages = “所在包名”(servlet或Filter的位置)

十五、JPA:6个

15.1、@Table()

类型:类作用:实体类对应表名取值:name = 对应数据库表名

15.2、@Entity

类型:类作用:使得当前类称为一个实体类,此时该类可以被JPA进行管理.

15.3、@Query

类型:方法作用:自定义配置sql语句取值:nativeQuery = 原生sql语句

15.4、@GeneratedValue()

类型:属性作用:主键注解取值:strategy = GenerationType.AUTO

15.5、@Id

类型:属性作用:主键注解

15.6、@Column

类型:属性作用:其他属性注解,对应数据库“别名”取值:name = 对应数据库键名

十六、Redis:4个

想要注解生效需要配置xml文件 | config类:

<!--略--> <bean id="cacheManager" class="巴拉巴拉"></bean>
@Configuration @EnableCaching public class RedisCacheConfig{ //yml文件中自定义key @Value("${cache.default-exp}") private long exps; @Value("${spring.redis.host}") private String host; @Value("${spring.redis.port}") private int port; //@Value("${spring.redis.timeout}") //private int timeout; //@Value("${spring.redis.password}") //private String password; /** * 设置redis中key的生成规则 */ @Bean public KeyGenerator keyGenerator() { return new KeyGenerator() { @Override public Object generate(Object target, Method method, Object... params) { StringBuffer sb = new StringBuffer(); sb.append(target.getClass().getName()); sb.append(method.getName()); for (Object obj : params) { sb.append(obj.toString()); } return sb.toString(); } }; } /** * RedisTemplate配置 */ @Bean public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> template = new RedisTemplate<>(); template.setConnectionFactory(redisConnectionFactory); // 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值 Jackson2JsonRedisSerializer<JSON> serializer = new Jackson2JsonRedisSerializer<>(JSON.class); ObjectMapper mapper = new ObjectMapper(); mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); serializer.setObjectMapper(mapper); template.setValueSerializer(serializer); template.setHashValueSerializer(serializer); // 使用StringRedisSerializer来序列化和反序列化redis的key值 template.setKeySerializer(new StringRedisSerializer()); //使得上面的配置生效 template.afterPropertiesSet(); return template; } @Bean public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) { // 生成一个默认配置,通过config对象即可对缓存进行自定义配置 RedisSerializer<String> redisSerializer = new StringRedisSerializer(); // 使用Jackson2JsnRedisSerializer来序列化和反序列化redis的value值 Jackson2JsonRedisSerializer<JSON> serializer = new Jackson2JsonRedisSerializer<>(JSON.class); // 配置序列化 RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer)); config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer)); // 设置缓存的默认过期时间 config.entryTtl(Duration.ofSeconds(exps)); // 不缓存空值 config.disableCachingNullValues(); return RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(config).build(); } }

16.1、@EnableCaching

类型:类作用:rebis的key的序列化器,写在config类上

16.2、@Cacheable()

类型:方法

作用:开启redis缓存,常用于select方法

取值:

//最终缓存结果等效语句:set string::id zhangsan // key的前缀 参数的值 缓存条件:返回值非空 @Cacheable(value = "string", key = "#id", unless = "#result eq null") public String function(int id){ return "zhangsan"; }

redis结构

16.3、@CachePut()

类型:方法作用:开启redis缓存,常用于update方法取值:见@Cacheable

16.4、@CacheEvict()

类型:方法作用:开启redis缓存,常用于delete方法取值:见@Cacheable

十七、RabbitMQ:2个

17.1、@RabbitListener

类型:方法

作用:声明监听特定队列,进行消费处理的方法

取值:queues = 多个队列

17.2、@RabbitHandler【了解,不常用】

类型:方法作用:用来声明处理接收消息的方法

十八、SpringCloud:14个

父项目依赖声明

<!--父项目依赖声明--> <packaging>pom</packaging> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <!--版本号与spring对应--> <version>Hoxton.SR4</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>

18.1、Eureka

依赖配置

<!--服务端依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
<!--客户端依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>

application.yml中配置

简略配置 server: # 端口号 port: 8761 eureka: instance: # ip地址 hostname: localhost client: serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
详解配置 eureka: client: #设置eureka服务器地址 service-url: #defaultZone: http://localhost:8761/eureka/ #defaultZone: http://admin:admin@localhost:8761/eureka/ defaultZone: http://admin:admin@localhost:8762/eureka/,http://admin:admin@localhost:8763/eureka #默认情况下,eureka会自己也注册自己身上,也就是会把eureka的信息记录到服务列表中! #如果要搭建eureka集群,实现eureka的高可用,需要把该值变为true register-with-eureka: true #是否从自身拉取自身的配置信息 fetch-registry: true #eureka常用的调优 instance: #默认情况下,服务器之间是利用服务名称来发现对象的!当把下面的配置改为true之后,就可以利用ip地址来发现别的服务了! prefer-ip-address: true #每隔多久客户端需要向服务器发送一次心跳,续约间隔,默认值30秒! lease-renewal-interval-in-seconds: 30 #如果在90秒内,客户端实例没有给服务器发送一次心跳,服务器就认为该客户端失效了,就把该服务从服务列表中移除! lease-expiration-duration-in-seconds: 90 server: #开启自我保护模式,默认已开启.一般在开发阶段需要关闭这个功能,可以置为false;而在上线后,一般需要开启该功能,把这个值置为true, #避免因为网络问题而造成心跳发送不成功,而把服务给剔除掉!也就是开启了自我保护之后,即使在90秒内一次心跳也没发,也不会剔除该服务! enable-self-preservation: true #默认情况下,eureka服务器一般希望在15分钟内,客户端发来心跳成功的次数,所占的比例要>85%! #如果低于这个0.85,就会在eureka后台展示一个红色的告警信息,说明心跳发送的有问题! #计算公式: 15*2=30,其实只需要大于等于30*0.85=25.5值,我们就认为没问题! renewal-percent-threshold: 0.85

18.1.1、@EnableEurekaServer

类型:类(写在启动类上)作用:服务端启动类注解

18.1.2、@EnableEurekaClient

类型:类(写在启动类上)作用:客户端启动类注解

18.1.3、@EnableWebSecurity

类型:类(写在启动类上)

作用:开启Eureka安全认证功能的配置类注解

需要添加依赖:

<!--Eureka安全认证依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency>

18.2、Ribbon

依赖配置

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> </dependency>

ribbonConfig配置

public class RibbinConfig{ @Bean public IRule iRule() { //设置一个轮询的负载均衡策略 //return new RoundRobinRule(); //随机 //return new RandomRule(); //基于响应时间进行权重的分配 return new WeightedResponseTimeRule(); } @Bean @LoadBalanced public RestTemplate restTemplate(){ return new RestTemplate(); } }

18.2.1、@LoadBalanced

类型:方法作用:让RestTemplate在请求时拥有客户端负载均衡的能力,即开启负载均衡的功能

18.3、Feign

依赖配置

<!-- 客户端依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>

创建一个接口,并和search模块映射

@FeignClient("SEARCH") // 指定eureka的服务名称 public interface SearchClient { // value -> 指定服务名称,method -> 指定请求方式 @RequestMapping(value = "/search",method = RequestMethod.GET) //@getMapping("/search") String search(); }

18.3.1、@EnabelFeignClients

类型:类(写在启动类上)作用:开启feingnClient注解功能

18.3.2、@FeignClient()

类型:类

作用:自定义一个接口以完成远程服务映射

取值:

name = “远程服务名称”

path = “/url” 防止接口冲突,提供前缀

18.4、Hystrix

依赖配置

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>

18.4.1、@EnableCircuitBreaker

类型:类(写在启动类上)作用:启动Hystrix降级服务

18.4.2、@EnableHystrixDashboard

类型:类(写在启动类上)

作用:配置断路器的监控界面

需要添加依赖

<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>

18.4.3、@HystrixCommand()

类型:方法作用:给当前方法开启降级服务取值:

fallbackMethod = “降级方法名”

@HystrixCommand修饰的函数必须和这个回调函数定义在同一个类中,因为定义在了同一个类中,所以fackback method可以是public/private均可。

defaultFallback = “默认降级方法名”

commanProperties = { 每一个18.4.4、@HystrixProperty注解 }

CommandKey = “当前方法名(可改别的)”;作用请参阅18.4.5、@CatchResult

18.4.4、@HystrixProperty

类型:方法作用:配置线程隔离取值:详细内容请参阅 com.netflix.hystrix.HystrixCommandProperties

18.4.5、@CatchResult

类型:方法作用: 不写取值时,把当前方法的方法名称作为缓存的key的一部分,而另一部分请参阅18.4.6、@CatchKey写取值cacheKeyMethod时,将设置key的责任完全负在自己肩上,这样做会忽略@CatchKey注解的作用把当前方法的返回值当作缓存的value 取值:cacheKeyMethod = “xxxx”注意:必须与@HystrixCommand注解结合使用

18.4.6、@CatchRemove

类型:方法

作用:清除缓存

取值:

commodKey = “需要清除缓存的方法名”cacheKeyMethod 同@CatchResult(cacheKeyMethod = “xxxx”)

注意:Marks methods used to invalidate cache of a command. Generated cache key must be same as key generated within CacheResult context.

译文:标记用于使命令的缓存无效的方法。生成的缓存键必须与CacheResult上下文中生成的键相同。

18.4.7、@CatchKey

类型:参数作用: 将参数当作缓存的key的一部分来使用需要配合@CatchResult或@CatchRemove使用如果不写该注解,默认为@CatchResult或@CatchRemove所修饰的所有参数作为key如若想不将参数写入键中,请查阅18.4.6.3.1

18.5、Zuul

依赖配置

<!--本身依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
<!--健康检测依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>

application.yml配置

# 指定Eureka服务的地址 eureka: client: service-url: defaultZone: http://root:root@localhost:8761/eureka,http://root:root@localhost:8762/eureka # 指定服务的名称 spring: application: name: ZUUL server: port: 10086 # 查看zuul的监控界面,(开发时配置为*,上线请不要配置) management: endpoints: web: exposure: include: "*"

18.5.1、@EnableZuulProxy

类型:类(写在启动类上)作用:开启网关功能

十九、lombok:9个

19.1、@Data

类型:类作用:相当于同时添加@Getter+@Setter+@RequiredArgsConstructor+@ToString+@EqualsAndHashCode。

19.2、@Getter

类型:属性、类作用:为当前类的所有privite修饰的属性添加get方法

19.3、@Setter

类型:属性、类作用:为所修饰的属性或者当前类的所有privite修饰的属性添加set方法

19.4、@RequiredArgsConstructor

类型:类作用:生成一个带有@nonNull特殊处理的参数构造方法

19.5、@ToString

类型:类作用:为当前类添加toString方法

19.6、@EqualsAndHashCode

类型:类作用:为当前类添加equals和hashCode方法

19.7、@AllArgsConstructor

类型:类作用:为当前类添加全参构造方法

19.8、@NoArgsConstructor

类型:类作用:为当前类添加无参构造方法

19.9、@NonNull

类型:字段、方法、参数、局部变量、类型使用作用:在方法/构造函数主体的开始处插入一个空检查,抛出一个NullPointerException,并将参数名称作为消息。如果放在字段上,任何生成的为该字段赋值的方法也将生成这些空检查。
最新回复(0)