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个
<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()
类型:类
作用:定义当前注解所标记的类在被创建时的单例、多例模式
取值(可以自己直接写,也可以使用静态常量):
@Scope(value
=ConfigurableBeanFactroy
.SCOPE_SINGLETIM
)
@Scope(value
="singleton")
@Scope(value
=ConfigurableBeanFactroy
.SCOPE_PROTOTYPE
)
@Scope(value
="prototype")
3.3、@Lazy()
类型:类
作用:
延迟加载(lazy init):创建对象时再进行加载,而非工厂准备完毕时就进行加载(不会立即创建对象)可以减少springIOC容器启动的加载时间
取值:
@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测试用注解
取值:
@RunWith(JUint4CalssRunner
.class)
@RunWith(SpringJUnit4ClassRunner
.class)
5.2、@ContextConfiguration()
类型:类
作用:读取配置文件
取值:
@ContextConfiguration("classpath:[配置文件的文件名]")
六、AOP:8个
<aop:aspectj-autoproxy/>
执行顺序:
无异常时:环绕前->前置->环绕后->最终->后置有异常时:环绕前->前置->最终->异常
五大通知的方法中可以有一个共同参数,可以得到目标类的对象、方法:
public void 方法名
(JoinPoint joinPoint
){}
6.1、@Aspect
类型:类作用:声明切面类
6.2、@Order()
类型:类
作用:多个切面切入同一个切入点时定义切面类的执行优先级,效果等同于继承Ordered接口
取值:int类型,取值越小优先级越高
@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()
类型:方法
作用:定义切面类后置通知方法
取值:切面方法和返回值名
@AfterReturning(value
="[被pointcut所注解的方法名]()",returning
= "#VALUE#")
public void afterReturning(Object #VALUE#
){}
6.6、@Around()
类型:方法作用:定义切面类环绕通知方法取值:切面方法
@Before(value
="[被pointcut所注解的方法名]()")
public Object
arond(ProceedingJoinPoint joinPoint
){
return point
.proceed();
}
6.7、@AfterThrowing()
类型:方法
作用:定义切面类异常通知方法
取值:切面方法和异常名
@AfterThrowing(value
="#被pointcut所注解的方法名#()",throwing
= "#VALUE#")
public void afterThrowing(Exception #VALUE#
){}
6.8、@After()
类型:方法
作用:定义切面类最终通知方法
取值:切面方法
@After(value
="#被pointcut所注解的方法名#()")
public void after(){}
七、事务:1个
<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个
<context:component-scan base-package="com.qf.controller"/>
<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")
方法注解:
@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()
类型:参数
作用:可以理解为给前端传来的参数起个别名
取值:
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个
使用时需要导入依赖包
<dependency>
<groupId>com.fasterxml.jackson.core
</groupId>
<artifactId>jackson-databind
</artifactId>
<version>2.9.6
</version>
</dependency>
9.1、@RequestBody
类型:参数
作用:将前端传来的json字符串转化为相应的对象
取值:
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()
类型:属性
作用:参见取值
取值:
@JsonInclude(JsonInclude
.Include
.NON_NULL
)
@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>
<mvc:annotation-driven>
<mvc:message-concerters>
<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{
@Value("${cache.default-exp}")
private long exps
;
@Value("${spring.redis.host}")
private String host
;
@Value("${spring.redis.port}")
private int port
;
@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();
}
};
}
@Bean
public RedisTemplate
<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory
) {
RedisTemplate
<Object, Object> template
= new RedisTemplate<>();
template
.setConnectionFactory(redisConnectionFactory
);
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
);
template
.setKeySerializer(new StringRedisSerializer());
template
.afterPropertiesSet();
return template
;
}
@Bean
public CacheManager
cacheManager(RedisConnectionFactory redisConnectionFactory
) {
RedisSerializer
<String> redisSerializer
= new StringRedisSerializer();
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方法
取值:
@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>
<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:
hostname: localhost
client:
serviceUrl:
defaultZone: http
://$
{eureka.instance.hostname
}:$
{server.port
}/eureka/
详解配置
eureka:
client:
service-url:
defaultZone: http
://admin
:admin@localhost
:8762/eureka/
,http
://admin
:admin@localhost
:8763/eureka
register-with-eureka: true
fetch-registry: true
instance:
prefer-ip-address: true
lease-renewal-interval-in-seconds: 30
lease-expiration-duration-in-seconds: 90
server:
enable-self-preservation: true
renewal-percent-threshold: 0.85
18.1.1、@EnableEurekaServer
类型:类(写在启动类上)作用:服务端启动类注解
18.1.2、@EnableEurekaClient
类型:类(写在启动类上)作用:客户端启动类注解
18.1.3、@EnableWebSecurity
类型:类(写在启动类上)
作用:开启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 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")
public interface SearchClient {
@RequestMapping(value
= "/search",method
= RequestMethod
.GET
)
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:
client:
service-url:
defaultZone: http
://root
:root@localhost
:8761/eureka
,http
://root
:root@localhost
:8762/eureka
spring:
application:
name: ZUUL
server:
port: 10086
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,并将参数名称作为消息。如果放在字段上,任何生成的为该字段赋值的方法也将生成这些空检查。