包扫描+组件注解(@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可以指定init和destroy方法
通过bean实现InitialzingBean(定义初始化逻辑),DisposableBean(定义销毁接口)
@PostConstructor:在bean创建完成并且属性复制完成,来执行初始化
@PostDestroy:在容器销毁之前通知我们进行清理工作
BeanPostProcessor:
PostProcessorBeforeInitialiation:在初始化工作之后
PostProcessorAfterInitialiation:在初始化工作之前
@AutoWired 注入
@Qualifier(“xxxx”)需要指定装配组建的id
@Primary , 排序问题,使用该注解创建Bean自动排在第一位
@Resource 和@AutoWired都是自动注入
@Inject 需要导入依赖,没有required=false;
@Value赋值
- SpEL:#{}
- ${}取出配置文件
@PropertySource读取外部配置文件以K/V形式,通过${}读取文件中的值
@Prpfile:指定组件在那个情况下才能注册到容器,不指定默认执行
Aop
@Before:前置通知,logStrat在目标div运行之前
@After:后置通知,logEnd在目标(div)运行之后,无论方法征程结束还是异常结束
@AfterThrowing:logException出现异常
@Around:动态代理,手动目标方法进行(joinPoint.Proceed())
@Aspect:告诉Spring这是切面类,开启事物
@EnableAspectJAutoProxy:开启注解Aop
@EnableTransactionMansgement:开启事务的管理功能
@Transactional:标识当前方法是一个事物方法
@EventListener(class={}):可以在组件上的方法监听事件
@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 格式:
@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文件 格式
跨域请求注解: @CrossOrigin
@Mapper 指定这是一个操作数据库的mapper(在映射接口中使用)
格式:
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 //使用负载均衡机制