Spring和SpringBoot常用注解(持续更新)
持久层(pojo)
1.@Data注解
lombok注解,用于自动生成getter\setter\toString等方法,使用前需要在pom.xml中引入如下内容
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
2.@NoArgsConstructor和@AllArgsConstructor
同样是lombok注解,用于生成无参构造和全参数构造方法
DAO层(mapper相关)
1.@Mapper和@MapperScan
这两个注解属于MyBatis注解
@Mapper注解标记在Mapper类上,mybatis需要找到对应的mapper,在编译时生成动态代理类,与数据库进行交互,这时需要用到@Mapper注解。具体实例可以看https://blog.csdn.net/qq_42224683/article/details/108738850
如果项目有几个接口,你肯定会在对应的接口上写@Mapper注解,但是如果有一百个,上千个,你还会愿意去写吗,这个时候我们就可以使用@MapperScan注解来解决我们的问题。@MapperScan是一个Mapper扫描器,主要是配置在主启动类上,示例如下:
@SpringBootApplication
@MapperScan("com.pips.mapper")
public class PipsApplication {public static void main(String[] args) {SpringApplication.run(PipsApplication.class, args);}
}
想要使用以上两个注解请在pom.xml中引入
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency>
一般只需要选用Mapper或者MapperScan两个方法中的其中一个就可以完成对Mapper的配置
2.@Repository
来自Spring的注解,用于声明一个Bean,@Repository和@Controller、@Service、@Component的作用差不多,都是把对象交给spring管理。@Repository用在持久层的接口上,这个注解是将接口的一个实现类交给spring管理。
Service层
1.@Service
用于标识一个类为Service类,一般用在服务层的接口上。Spring会生成一个对应的Service的Bean,并且将其交由Spring托管。
Controller层
1.@Controller
用于标识一个类为Controller类,一般用在服务层的接口上。Spring会生成一个对应的Controller的Bean,并且将其交由Spring托管。
通用注解
@Conponent
将注解所标注的类标注为Spring管理的Bean,使用@Component注解在一个类上,表示将此类标记为Spring容器中的一个Bean。上文提到的**@Repository、@Service、@Controller**均是@Conponent的进一步扩展。
@Autowired
自动装配注解,一般可以标记在一个属性、方法、未初始化的对象声明或者构造器上,Spring会根据被标记对象的类型在Spring的BeanFactory中选取出相应的类型的Bean完成自动装配。我们较为常用的场景如下:
@Service
public class UserServiceImpl implements UserService{@Autowiredprivate UserMapper userMapper;@Overridepublic User queryUserById(String id) {return userMapper.getUserById(id);}
}
上面是一个Service层接口的实现类,使用Autowired注解实现对UserMapper的自动装配。在此之前UserMapper接口已经被@Repository标记,也就是Spring生成了一个UserMapper的Bean,此时执行到UserServiceImpl 的时候,Spring看到被@Autowired标记的UserMapper接口,则会查询对应的Bean,然后自动装配到未被实例化的对象声明userMapper中,那么我们在下面的queryUserById方法中就可以直接调用userMapper了。实际上userMapper在静态编译的时候是未被初始化的,他是在运行时动态创建的,是Spring使用Java的反射机制实现IoC来动态创建的。
@Resource
也是一种自动装配注解,可以实现自动装配。它和Autowired的区别如下:
(1)基因不同: 首先其最大的不同在于她们的爸爸妈妈不同(@Autowired是由org.springframework.beans.factory.annotation.Autowired提供,换句话说就是由Spring提供;@Resource是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上。)
(2)注入方式:@Autowired默认按照byType 注入(按照类型注入),也提供byName;@Resource默认按byName自动注入,也提供按照byType 注入;
@Qualifier
默认情况下,@Autowired 按类型装配 Spring Bean。如果容器中有多个相同类型的 bean,则框架将抛出 NoUniqueBeanDefinitionException, 以提示有多个满足条件的 bean 进行自动装配。通过使用 @Qualifier 注解,我们可以消除需要注入哪个 bean 的问题。通过将 @Qualifier 注解与我们想要使用的特定 Spring bean 的名称一起进行装配,Spring 框架就能从多个相同类型并满足装配要求的 bean 中找到我们想要的,从而避免这个问题。
@RequestMapping
@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一。这个注解会将 HTTP 请求映射到 MVC 和 REST 控制器的处理方法上。其下属的注解还有@GetMapping@PostMapping@PutMapping@DeleteMapping@PatchMapping。举个例子,@GetMapping就相当于@RequestMapping(method = RequestMethod.GET),其他注解亦如此。@GetMapping则是使用Get方法去处理请求,而@PostMapping则是使用Post来处理请求。详解可以看这篇文章:https://blog.csdn.net/demo_yo/article/details/123608034
@Configuration
配置注解,将一个java类声明为配置类,Spring会将该类转化为一个.xml文件。