Spring注解 持续更新学习中.......

包扫描+组件注解(@Component@Service@Controller@Repository

@Bean 给容器添加Bean

@Import 导入组件

Import(类名),id默认组件全名

ImprtSelector,返回需要导入组件全类名

ImportBeanDefinittionRegistrar:手动注册Bean

Spring提供BeanFactory

默认获取BeanFactory调用getObject创建对象

@Conditional{{xxx.class}},按照引入的限制规则,满足条件注册Bean对象

@Scope

Prototype:多例,ioc容器启动不会调用方法创建对象在容器中,在每次获取时才调用调用方法创建对象。(Lazy

Singleton:单例,启动就会创建对象,以后每次调用就是从容器拿(即时加载)

 

组件注册过滤条件

@ComponentScan value:指定要扫描的包

ExcludeFilters = Filter[]: 指定规则,排除那些组件

IncludeFilters = Filter[]: 指定包含那些组件,需要将userDefaultFilers设置为false

FilterType.ANNOTATION:按注解指定

FilterType.ASSIGABLE_TYPE:按指定类型

FilterType.REGEX:使用正则指定

FilterType.CUSTOM:自定义

 

生命周期中

@Bean可以指定initdestroy方法

通过bean实现InitialzingBean(定义初始化逻辑),DisposableBean(定义销毁接口)

@PostConstructor:在bean创建完成并且属性复制完成,来执行初始化

@PostDestroy:在容器销毁之前通知我们进行清理工作

BeanPostProcessor

PostProcessorBeforeInitialiation:在初始化工作之后

PostProcessorAfterInitialiation:在初始化工作之前

@AutoWired 注入

@Qualifier(“xxxx”)需要指定装配组建的id

@Primary , 排序问题,使用该注解创建Bean自动排在第一位

@Resource @AutoWired都是自动注入

@Inject  需要导入依赖,没有required=false

@Value赋值

  1. SpEL:#{}
  2. ${}取出配置文件

@PropertySource读取外部配置文件以K/V形式,通过${}读取文件中的值

@Prpfile:指定组件在那个情况下才能注册到容器,不指定默认执行

 

Aop

@Before:前置通知,logStrat在目标div运行之前

@After:后置通知,logEnd在目标(div)运行之后,无论方法征程结束还是异常结束

@AfterThrowinglogException出现异常

@Around:动态代理,手动目标方法进行(joinPoint.Proceed()

@Aspect:告诉Spring这是切面类,开启事物

@EnableAspectJAutoProxy:开启注解Aop

@EnableTransactionMansgement:开启事务的管理功能

@Transactional:标识当前方法是一个事物方法

@EventListenerclass={}):可以在组件上的方法监听事件

@HandlesTypes:指定类型下面的子类传递过来Set<Class<?>>

@EnableWebMvc:接管springmvc

@GetMapping,处理get请求
@PostMapping,处理post请求
@PutMapping,处理put请求
@DeleteMapping,处理delete请求

 

四个元注解:

@Retention:注解的保留位置         

@Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含

@Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,

@Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件中存在,在运行时可以通过反射获取到

@Target:注解的作用目标  

@Target(ElementType.TYPE)   //接口、类、枚举、注解

  @Target(ElementType.FIELD) //字段、枚举的常量

  @Target(ElementType.METHOD) //方法

  @Target(ElementType.PARAMETER) //方法参数

  @Target(ElementType.CONSTRUCTOR)  //构造函数

  @Target(ElementType.LOCAL_VARIABLE)//局部变量

  @Target(ElementType.ANNOTATION_TYPE)//注解

  @Target(ElementType.PACKAGE) ///包   

@Document:说明该注解将被包含在javadoc中

@Inherited:说明子类可以继承父类中的该注解

 

SpringBoot注解

读取外置文件注解

比较项 @ConfigurationProperties  @Value
全量注入 支持 不支持
松散绑定 支持  不支持
SpEL 不支持 支持
JSR303 支持 不支持

@ConfigurationProperties 格式:@ConfigurationProperties(prefix = "user(文件名)")

@Value 格式:@Value("${user.username}")

@Entity 告诉Jpa这是一个实体类

@Table(name = "xxx")    指定数据库的表名  name指定表明

@GeneratedValue(strategy = GenerationType.IDENTITY) //自增主键

@Colum(name = "xxx" , length = 50) 指定列名,并表明长度

 

指定配置文件:

@PropertySource  属性加载配置文件,支持properties文件,不支持yml文件  格式@PropertySource  (value = {"classpath:config(文件名)/xxxx.properties"})

@ImportResource 加载Spring的xml文件  格式 @ImportResource(value = {"classpath:/bean.xml"})

跨域请求注解:  @CrossOrigin

@Mapper  指定这是一个操作数据库的mapper(在映射接口中使用)

格式:@Mappings({ @Mapping(source = "chapter.name", target = "groupName"),@Mapping(source = "chapter.parentId", target = "parentName"), })

source 属性的 chapter.name 中的 chapter就是方法的参数名,name当然就是属性名了。target属性,就是需要映射的model的属性名

@Options(useGeneratedKeys = true,keyProperty = “id”)   告诉Spring自增主键,是表中的id字段

 

 

日志注解

@SLF4J

 

组件注解

 

缓存

@Primary   将某个缓存管理器作为默认的

 

消息中间件

@EnableRabbit     开启RabbitMQ

@RabbitListener(queues = "xxx")  监听消息队列

异步注解

@EnableAsync   开启异步注解功能

@Async   表示该方法为异步方法

定时任务

@EnableScheduling   开启定时任务

@Scheduled  表明方法为定时任务

例子:

  second(秒), minute(分), hour(时), day of month(日), month(月), day of week(周几).
  0 * * * * MON-FRI
【0 0/5 14,18 * * ?】 每天14点整,和18点整,每隔5分钟执行一次
【0 15 10 ? * 1-6】 每个月的周一至周六10:15分执行一次
【0 0 2 ? * 6L】每个月的最后一个周六凌晨2点执行一次
【0 0 2 LW * ?】每个月的最后一个工作日凌晨2点执行一次
【0 0 2-4 ? * 1#1】每个月的第一个周一凌晨2点到4点期间,每个整点都执行一次;

 

 

突然发现不认识的注解

@Deprecated 标识已经过时  

@SuppressWarnings    抑制编辑器警告

@Target 说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。

 

Dubbo 

@Reference   用在消费端,表明使用的是服务端的什么服务(远程调用)

格式:

@Reference(version = "1.0.0",check = true)

@Service   用在服务提供者中,在类或接口中声明。

@Service(version = "1.0.0",timeout = 10000,interfaceClass = (对应类).class)

 

Spring Cloud feign

@EnableDiscoveryClient   //开启发现服务功能

@LoadBalanced   //使用负载均衡机制

posted @ 2020-05-24 15:51  Money131  阅读(178)  评论(0编辑  收藏  举报