spring注解:
@SpringBootApplication修饰main函数所在类,是个类级别注解:是@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan三个注解组合作用的代替注解
@SpringBootConfiguration修饰配置性质的类,是个类级别注解,被注解的类作用等同于一个xml。配合@Bean,作用就相当于在一个xml里头定义了数个bean。
@Bean,注释是用来表示一个公有方法实例化,配置和初始化是由 Spring IoC 容器管理的一个新的对象,作用相当于xml里头的bean标签。主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。@Bean(initMethod="aa",destroyMethod="bb",name="future")--> 指定 aa和bb方法在构造之后.Bean销毁之前执行,指定当前的bean的名称为future,默认会以注解的方法名为名称,销毁和初始化的方法必须是在bean所在class里头定义
@Scope("prototype"),可以配合@Bean使用设定bean的scope
@EnableAutoConfiguration,启用 Spring 应用程序上下文的自动配置,主要是用来开启自动配置是扫描jar包下,配置了META-INF/spring.factories里面的类和针对当前包以及子包下的自定义组件的(也就是归spring管理的)
@WebAppConfiguration("src/main/resources") : 是一级注释,用于声明一个ApplicationContext集成测试加载WebApplicationContext。作用是模拟ServletContext。注解在类上,用来声明加载的ApplicationContex 是一个WebApplicationContext ,它的属性指定的是Web资源的位置,默认为 src/main/webapp ,自定义修改为 resource
@RunWith就是一个运行器(junit注解)
@RunWith(JUnit4.class)就是指用JUnit4来运行
@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境
@RunWith(Suite.class)的话就是一套测试集合,
@ContextConfiguration(locations={"classpath:spring/applicationContext-*xml"}),因为controller,component等都是使用注解,需要注解指定spring的配置文件,扫描相应的配置,将类初始化等。spring里头的单元测试会用到,springboot用不到
@Order,类注解,指定这个类的bean的加载先后顺序
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional 这个两个配合使用,transactionManager = "transactionManager"指定事物管理的bean,defaultRollback = true配置事务的回滚,对数据库的增删改都会回滚,便于测试用例的循环利用
@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚
@Transactional(propagation=Propagation.NOT_SUPPORTED)
Propagation属性值意义:
REQUIRED:业务方法需要在一个容器里运行。如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务。
NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。
REQUIRESNEW:不管是否存在事务,该方法总汇为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务挂起,新的事务被创建。
MANDATORY:该方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果在没有事务的环境下被调用,容器抛出例外。
SUPPORTS:该方法在某个事务范围内被调用,则方法成为该事务的一部分。如果方法在该事务范围外被调用,该方法就在没有事务的环境下执行。
NEVER:该方法绝对不能在事务范围内执行。如果在就抛例外。只有该方法没有关联到任何事务,才正常执行。
NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效
@SessionAttributes(value="{...}"):将数据模型中的属性升级为session里头的属性,这样可以多次请求都能访问,原理,是在本次请求结束之后把数据模型对应属性写到session。第二次请求进来又会把session中的数据写到数据模型里头如下:
若不给定注解,参数的绑定,框架默认 如下:@EnableSwagger2:启用swagger2
@ControllerAdvice:
lombok注解:
lombok的官方地址:https://projectlombok.org/
lombok的Github地址:https://github.com/rzwitserloot/lombok
@NonNull: :注解在属性上;可以帮助我们避免空指针。
@Slf4j : 注解在类上;为类提供一个 属性名为log 的 log4j 日志对象
@Cleanup: 注解在实例上;自动帮我们调用close()方法。作用于继承了closeable的实例
@Getter / @Setter:注解在属性上; 自动生成Getter/Setter方法
@NoArgsConstructor: 注解在类上;自动生成无参数构造函数。
@AllArgsConstructor:注解在类上; 自动生成全参数构造函数。
@Data: 注解在类上;自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor.
@ToString(exclude="id") :类级别注解,自动生成类中所有属性的组成的toString方法,除了id这个属性