Spring注解 汇总

0、SpringBoot注解

@SpringBootApplication

申明让spring boot自动给程序进行必要的配置。

​ 包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。

@ComponentScan:组件扫描,可自动发现和装配一些Bean。让spring Boot扫描到Configuration类并把它加入到程序上下文。

@Configuration :等同于spring的XML配置文件;使用Java代码可以检查类型安全。

@EnableAutoConfiguration :自动配置。

@EnableScheduling
@EnableScheduling的作用与<task:...../>的作用一样,会扫描整个项目中的@Scheduled注解
@Configuration类似于xml配置文件中的<beans...../>
@MapperScan
之前,Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,麻烦。@MapperScan可以指定要扫描的Mapper类的包的路径

详细解释:

@EnableAutoConfiguration:SpringBoot自动配置(auto-configuration):尝试根据你添加的jar依赖自动配置你的Spring应用。例如,如果你的classpath下存在HSQLDB,并且你没有手动配置任何数据库连接beans,那么我们将自动配置一个内存型(in-memory)数据库”。你可以将@EnableAutoConfiguration或者@SpringBootApplication注解添加到一个@Configuration类上来选择自动配置。如果发现应用了你不想要的特定自动配置类,你可以使用@EnableAutoConfiguration注解的排除属性来禁用它们。
@ComponentScan:表示将该类自动发现扫描组件。个人理解相当于,如果扫描到有@Component、@Controller、@Service等这些注解的类,并注册为Bean,可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。可以自动收集所有的Spring组件,包括@Configuration类。我们经常使用@ComponentScan注解搜索beans,并结合@Autowired注解导入。如果没有配置的话,Spring Boot会扫描启动类所在包下以及子包下的使用了@Service,@Repository等注解的类。
@Configuration:相当于传统的xml配置文件,如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。
@SpringBootApplication
@EnableScheduling
@MapperScan("com...web.*.mapper")
public class OMSAdminApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(OMSAdminApplication.class, args);
    }    
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(OMSAdminApplication.class);
    }
}

一、spring注解

1.1 IOC相关注解

1.1.1 基本注解:

创建对象:

@Component: 属性:value:用于指定bean的id。 #默认值: 当前类名,且首字母改小写。

@Controller:一般用在表现层

@RestController:用于标注控制层组件(如struts中的action),@ResponseBody和@Controller的合集。

@Service:一般用在业务层

@Repository:一般用在持久层

@Mapper :mapper类文件中添加,用于映射mapper.xml文件,也可以用@MapperScan在springboot的启动类中配置所有包扫描

注入数据:

@Autowired :自动按照数据类型注入

@Inject:等价于默认的@Autowired,只是没有required属性;

@Qualifier: (value)类上搭配@Autowired 方法单独使用

@Resource (name)直接按照bean的id注入 相当于@Autowired+@Qualifier

@Value :注入基本类型和String类型的数据 @value(“${表达式}”)

改变作用范围的:

@Scope

属性:value:指定范围的取值。 #常用取值:singleton、prototype

生命周期相关:

@PreDestroy 作用:用于指定销毁方法

@PostConstruct 作用:用于指定初始化方法

1.1.2 新注解:

配置相关

作用:代替xml配置文件,用纯注解配置IOC会用到

@Configuration 【标志:没有属性】

作用:指定当前类是一个配置类

@ComponentScan

作用:spring在创建容器时要扫描的包

属性:value:它和basePackages的作用是一样的。

@Bean

作用:只能写在方法上 用于把当前方法的 #返回值作为bean对象存入spring的ioc容器中

属性: name:用于指定bean的id。当不写时,默认值是当前方法的名称

@Import

作用:用于导入其他的配置类

属性:value:用于指定其他配置#类的字节码。有Import注解的类就父配置类,而导入的都是子配置类

@ImportResource

作用:用来加载xml配置文件。

@PropertySource

作用:用于指定properties文件的位置

属性:value:指定文件的名称和路径。

关键字:classpath,表示类路径下==@PropertySource(“classpath : jdbcConfig.properties”)==

@value 作用: 从properties配置文件中获取数据

其他
@Scheduled

定时任务的配置 作用于方法上。

@Async
用于service的方法上,异步调用方法,当controller调用该service的方法时,会立即返回结果,service方法会在后台异步执行,用户体验较好。
Spring容器启动初始化bean时,判断类中是否使用了@Async注解,创建切入点和切入点处理器,根据切入点创建代理,在调用@Async注解标注的方法时,会调用代理,执行切入点处理器invoke方法,将方法的执行提交给线程池,实现异步执行。

注意:和该注解类似的基于AOP的注解,要通过代理对象去执行方法,因此(1)方法要是public修饰的方法,才能进行代理,(2)要在类的角度调用该方法,不能直接调用,不然不会实现AOP

SpringContextHolder.getBean(this.getClass()).handleUserInfo(appId, wxMpUserList);

@Async
public void handleUserInfo(String appId, WxMpUserList wxMpUserList){}

1.2 AOP相关注解

@Aspect #表明当前类是一个切面类

@Pointcut(“execution(* com.service.impl..(…))”) #切入点表达式注解配置

@After(“pt1()”) #通知方法的注解配置

@Before @after-returning @after-throwing @after//方法配置为通知

@Component("transactionManager")
@Aspect#表明当前类是一个切面类
public class TransactionManager {

    @Pointcut("execution(* com.service.impl.*.*(..))")#切入点表达式注解配置
    private void pt1(){}
	
	@After("pt1()")#通知方法的注解配置  
	public void release() {

@Before @after-returning @after-throwing @after//方法配置为通知

@ComponentScan(basePackages=“com.itheima”) @EnableAspectJAutoProxy

不使用XML的配置方式

@Configuration
@ComponentScan(basePackages="com...")
@EnableAspectJAutoProxy
public class SpringConfiguration {
}

@Transactional 声明式事务

@Transactional(rollbackFor = Exception.class)

二、Springmvc的注解

@RequestMapping注解

作用:用于建立 请求路径 URL 和 处理请求方法之间的映射关系。简言:匹配请求路径,映射到方法

属性:

1. path 指定请求路径的url == value属性
2. mthod 指定该方法的请求方式
3. params 指定限制请求参数的条件。 要求请求参数的 key 和 value 必须和 配置的一模一样。
   eg:params = {"accountName=张三"},表示请求参数必须有 ?accountName=张三
4. headers 发送的请求中必须包含的请求头
四个属性只要出现 2 个或以上时,他们的**关系是与的关系**。
@RequestParam注解

作用:当前端页面传递的属性名称和后台的控制器方法中的参数不一样时,进行参数名称指定。

把请求中的指定名称的参数传递给控制器中的形参赋值

属性:

1. value:请求参数中的名称 name属性意义一样
2. required:
   1. 是否必须,默认值是true,必须提供 如果参数没出现,报错400。
   2. false,如果参数没出现,null
3. defaultValue:默认值
@RequestMapping("/testRequestParam")    #请求必须提供name的key值
public String testRequestParam(@RequestParam(name="name") String username  

@RequestBody注解

作用:用于获取请求体的内容(注意:get方法不可以,没有请求体)

​ 直接使用得到是 key=value&key=value…结构的数据

属性:required:是否必须有请求体,默认值是true

​ 当取值为 true 时,get 请求方式会报错。如果取值 为 false, get 请求得到是 null。

@RequestMapping(path="/hello")
public String sayHello(@RequestBody String body)  获取请求体的内容

@ModelAttribute注解

作用 【该方法先执行】

  1. 出现在方法上:表示当前方法会在控制器方法执行前先执行。 【修饰的方法有返回值】
  2. 出现在参数上:获取指定的数据给参数赋值。【修饰的方法没有返回值】

属性:value:用于获取数据的 key。 key 可以是 POJO 的属性名称,也可以是 map 结构的 key。

作用过程理解**:
(1)被它修饰的方法先执行,进行数据库查找值,
(2)将数据封装在map集合中。
(3)然后修饰在参数上,通过value属性获取值,给对应的参数进行赋值。
应用场景: 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
@RequestHeader注解

作用:获取指定请求头的值

属性: value:请求头的名称

@PathVariable注解

作用:获取请求参数中,占位符中的值.用于RESTFUL风格的编程方式。

​ 例如:url中有/delete/{id},{id}就是占位符

属性:value:指定url中的占位符名称

url 支持占位符是 spring3.0 之后加入的。是 springmvc 支持 rest 风格 URL 的一个重要标志

@CookieValue注解

作用:用于获取指定cookie的名称的值

属性: value:cookie的名称 【注意】value=“JSESSIONID”

@SessionAttributes注解

作用:用于多次执行控制器方法间的参数共享

属性: value:指定存入属性的名称

三、Mybatis注解

@Insert:实现新增  直接跟sql语句
@Update:实现更新
@Delete:实现删除
@Select:实现查询
----------------------------------
@Results:可以与@Result 一起使用,封装多个结果集
	属性:
    	id:唯一标识 后续可以被@ResultMap引用
        value:装@Result中对应关系的的数组
		
@Result:实现结果集封装
	属性:
        id 是否是主键字段
        column 数据库的列名
        property 需要装配的属性名
        one 需要使用的@One 注解(@Result(one=@One)()
        many 需要使用的@Many 注解(@Result(many=@many)()

@ResultMap:方法上,实现引用@Results定义的封装
------------------------------------
@One:实现一对一结果集封装  代替了<assocation>标签
	属性:
    	select = "com.itheima.dao.IUserDao.findById",【关联查询语句】
        fetchType = FetchType.EAGER  【立即加载】
@Many:实现一对多结果集封装  代替了<Collection>标签
	属性:
    	select =  "com.itheima.dao.IAccountDao.findByUid",【关联查询语句】
        fetchType = FetchType.LAZY   【延迟加载】

        
------------------------------------
@SelectProvider: 实现动态 SQL 映射
@CacheNamespace:实现注解二级缓存的使用

四、JPA注解

@Entity:@Table(name=”“):表明这是一个实体类。

​ 一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略

@Column:如果字段名与列名相同,则可以省略。

@Id:表示该属性为主键。

@MappedSuperClass:用在确定是父类的entity上。父类的属性子类可以继承。

@NoRepositoryBean:一般用作父类的repository,有这个注解,spring不会去实例化该repository。

GeneratedValue(strategy = GenerationType.SEQUENCE,generator = “repair_seq”):表示主键生成策略是sequence(可以为Auto、IDENTITY、native等,Auto表示可在多个数据库间切换),指定sequence的名字是repair_seq。

@SequenceGeneretor(name = “repair_seq”, sequenceName = “seq_repair”, allocationSize = 1):name为sequence的名称,以便使用,sequenceName为数据库的sequence名称,两个名称可以一致。

@Transient:表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性。如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则,ORM框架默认其注解为@Basic。@Basic(fetch=FetchType.LAZY):标记可以指定实体属性的加载方式

@JsonIgnore:作用是json序列化时将Java bean中的一些属性忽略掉,序列化和反序列化都受影响。

@JoinColumn(name=”loginId”):一对一:本表中指向另一个表的外键。一对多:另一个表指向本表的外键。

@OneToOne、@OneToMany、@ManyToOne:对应hibernate配置文件中的一对一,一对多,多对一。

五、lombok相关注解

直接看编译文件更直观https://zhuanlan.zhihu.com/p/32779910

@Data
注解在 类 上;提供类所有属性的 get 和 set 方法,此外还提供了equals、canEqual、hashCode、toString 方法。
@Setter
@Getter
注解在 属性 上;为单个属性提供 set 方法; 
注解在 类 上,为该类所有的属性提供 set 方法, 都提供默认构造方法。
@Builder
作用在类上:使用builder模式创建对象
User user = User.builder()
@slf4j
注解在 类 上;为类提供一个 属性名为 log 的 log4j 日志对象,提供默认构造方法。 自动生成日志对象。
@AllArgsConstructor
注解在 类 上;为类提供一个全参的构造方法,加了这个注解后,类中不提供默认构造方法了。
@NoArgsConstructor
注解在 类 上;为类提供一个无参的构造方法。
@EqualsAndHashCode
注解在 类 上, 可以生成 equals、canEqual、hashCode 方法。
@ToString
这个注解用在 类 上,可以生成所有参数的 toString 方法,还会生成默认的构造方法。
@NonNull
注解在 属性 上,会自动产生一个关于此参数的非空检查,如果参数为空,则抛出一个空指针异常,也会有一个默认的无参构造方法。
一般使用@NotNull
@Cleanup
注解用在 变量 前面,可以保证此变量代表的资源会被自动关闭,默认是调用资源的 close() 方法,如果该资源有其它关闭方法,可使用 @Cleanup(“methodName”) 来指定要调用的方法,也会生成默认的构造方法
@RequiredArgsConstructor
这个注解用在 类 上,使用类中所有带有 @NonNull 注解的或者带有 final 修饰的成员变量生成对应的构造方法。
@Value
这个注解用在 类 上,会生成含所有参数的构造方法,get 方法,此外还提供了equals、hashCode、toString 方法。
@SneakyThrows
这个注解用在 方法 上,可以将方法中的代码用 try-catch 语句包裹起来,捕获异常并在 catch 中用 Lombok.sneakyThrow(e) 把异常抛出,可以使用 @SneakyThrows(Exception.class) 的形式指定抛出哪种异常,也会生成默认的构造方法。
@Synchronized
这个注解用在 类方法 或者 实例方法 上,效果和 synchronized 关键字相同,
区别:在于锁对象不同,对于类方法和实例方法,
synchronized 关键字的锁对象分别是类的 class 对象和 this 对象,
而@Synchronized 的锁对象分别是 私有静态 final 对象 lock 和 私有 final 对象 lock,当然,也可以自己指定锁对象,此外也提供默认的构造方法。
@Accessors(chain = true)
使用链式设置属性,set方法返回的是this对象。
userChain.setId("1").setName("chain").setAge(1);

六、MybatisPlus

@Data

lombok相关

@TableName

指定数据库表名

@TableId

指定表的主键 因为MP默认匹配主键“id”

@TableField

指定表的列名 MP默认,下划线换大写的驼峰方式

@version

乐观锁注解

@EnumValue

描述:通枚举类注解(注解在枚举字段上)

@TableLogic

描述:表字段逻辑处理注解(逻辑删除)

@SqlParser

描述:租户注解 3.1.1开始支持注解在mapper上和mapper的方法上

@KeySequence

描述:序列主键策略 oracle

七、全局异常处理

@ControllerAdvice:包含@Component。可以被扫描到。统一处理异常。

@RestControllerAdvice:

@ExceptionHandler(Exception.class):用在方法上面表示遇到这个异常就执行以下方法。

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler//处理所有异常
    public ResponseMessage exceptionHandler(Exception e, HttpServletResponse response) {
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值