springboot常见注解
1、@Override
表示此方法是一个覆写的方法,一般出现在serviceimpl实现类方法上;java在进行接口实现的时候,要实现接口中定义的所有方法,也就是通过实现类重写方法。加上此注解,会帮助我们检测方法重写的正确性,例如:方法名是否与接口中一致(也就是是否可以在接口中找到次方法定义),方法的引用参数是否正确等等。。。
2、@Controller
注解处理Http请求
3、@RestController 是 @Controller跟 @ResponseBody 两个注解的结合体
@Cotroller:对应的方法上,视图解析器可以return jsp/html等页面,并跳转到相应页面;若返回Json等内容到页面,需要加上@ResponseBody
@RestController : @Controller跟 @ResponseBody 两个注解的结合体,但不能返回Jsp/html等页面
4、@RequestBody:主要接收前端传递给后端的Json字符串中的数据(请求体中的数据的),GET方法无请求体,所以用@RequestBody接受数据时,前端不能用get提交数据,要用post提交;后端方法中 @RequestBody与@RequestParam可以同时使用,@RequestBody只能有一个,@RequestParam可以有多个
RequestBody
接收的是请求体里面的数据;而RequestParam
接收的是key-value
里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收)。
即:如果参数时放在请求体中,传入后台的话,那么后台要用@RequestBody
才能接收到;如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam
来接收,或则形参前什么也不写也能接收。
如果参数前写了@RequestParam(xxx)
,那么前端必须有对应的xxx
名字才行(不管其是否有值,当然可以通过设置该注解的required
属性来调节是否必须传),如果没有xxx
名的话,那么请求会出错,报400。
如果参数前不写@RequestParam(xxx)
的话,那么就前端可以有可以没有对应的xxx
名字才行,如果有xxx
名的话,那么就会自动匹配;没有的话,请求也能正确发送。
5、通过@PathVariable,例如/blogs/1
通过@RequestParam,例如blogs?blogId=1
(1)当指向具体的业务资源时,用@PathVariable
(2)当URI对资源进行过滤时,用@RequestParam
6、@Param是mybatis的注解,用注解来简化XmL配置,@Param注解的作用是给参数命名,命名后能根据名字得到参数值,正确将参数传入sql语句
public interface Mapper { @Select("select s_id id,s_name name,class_id classid from student where s_name= #{aaaa} and class_id = #{bbbb}") public Student select(@Param("aaaa") String name,@Param("bbbb")int class_id); } }
7、@repository:注解DAO持久层接口,只能标注在DAO类上,因为他还能将所标注的类中的抛出的数据访问异常封装为Spring的数据访问异常
8、@Service/@Repository不能接在接口上,而要写在接口实现类上,@Autowired注入时,可以用接口注入,也可以用实现类注入
9、当一个接口有多个实现类,可以用@Autowired注入接口
(1)但需要配合@Qualifier使用,指定名称@Qualifier(value = "实现类名称")
(2)要注入的实现类必须加上别名 @Repository("别名")
10、@Mapper:给Mapper接口自动生成一个实现类,让Spring对mapper接口的bean进行管理,
11、@Autowired:注解由Spring提供,@Resource由J2EE提供
@Autowired注解默认通过byType方式注入,@Resource注解默认是通过byName方式注入
(1)@Autowired默认注入方式是byType,根据类型匹配,当有多个实现时,则通过byname注入,也通过配合@Qualifier注解显式的指定name值
(2)@Resource默认是Byname注入,没有匹配则通过bytype注入
// 1. 默认方式:byName @Resource private UserService userDao; // 2. 指定byName @Resource(name="userService") private UserService userService; // 3. 指定byType @Resource(type=UserService.class) private UserService userService; // 4. 指定byName和byType @Resource(name="userService",type=UserService.class) private UserService userService;
12、@RunWith(SpringRunner.class)的作用表明Test测试类要使用注入的类,比如@Autowire注入的类,使用@RunWith(SpringRunner.class)这些类才能实例化到Spring容器中,自动注入才能生效
13、使用Loggger记录器时候,注意别导错包
import org.slf4j.Logger; import org.slf4j.LoggerFactory; @SpringBootTest class RedisstudyApplicationTests { private static final Logger logger = LoggerFactory.getLogger(RedisstudyApplicationTests.class); }