Spring注解
@Component:使用在类上用于实例化Bean,可以代替@Controller、@Service、@Repository或其他用于实例化Bean
@Controller:使用在web层类上用于实例化Bean
@Service:使用在service层类上用于实例化Bean
@Repository:使用在dao层类上用于实例化Bean
@Autowired:使用在字段上用于根据类型依赖注入
@Qualifier:结合@Autowired一起使用用于根据名称进行依赖注入
@Resource:相当于@Autowired+@Qualifier,按照名称进行注入
@Value:注入普通属性
@Scope:标注Bean的作用范围
当scope的取值为singleton时
Bean的实例化个数:1个
Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例
Bean的生命周期:
对象创建:当应用加载,创建容器时,对象就被创建了
对象运行:只要容器在,对象一直活着
对象销毁:当应用卸载,销毁容器时,对象就被销毁了
当scope的取值为prototype时
Bean的实例化个数:多个
Bean的实例化时机:当调用getBean()方法时实例化Bean
对象创建:当使用对象时,创建新的对象实例
对象运行:只要对象在使用中,就一直活着
对象销毁:当对象长时间不用时,被 Java 的垃圾回收器回收了
@PostConstruct:使用在方法上标注该方法是Bean的初始化方法,指的是在项目启动的时候执行这个方法,也可以理解为在spring容器启动的时候执行
@PreDestroy:使用在方法上标注该方法是Bean的销毁方法,指的是在项目销毁的时候执行这个方法
@Configuration:用于指定当前类是一个 Spring 配置类,当创建容器时会从该类上加载注解
@ComponentScan:用于指定 Spring 在初始化容器时要扫描的包。 作用和在 Spring 的 xml 配置文件中的 <context:component-scan base-package="com.包名"/>一样
@Import:用于导入其他配置类
@Bean:使用在方法上,标注将该方法的返回值存储到 Spring 容器中
@PropertySource:用于加载.properties 文件中的配置
@Runwith:注解替换原来的运行期
@ContextConfiguration:指定配置文件或配置类
@ControllerAdvice:主要用来处理全局数据,一般搭配@ExceptionHandler、@ModelAttribute以及@InitBinder使用。
@ExceptionHandler:统一处理某一类异常,从而能够减少代码重复率和复杂度,一般搭配@ControllerAdvice
SpringMVC注解解析
@RestController:是@controller和@ResponseBody 的结合
@controller使用在web层类上用于实例化Bean
@ResponseBody:告知SpringMVC框架,方法返回的字符串不是跳转是直接在http响应体中返回,不进行视图跳转,直接进行数据响应
@RequestMapping("/路径"):用于建立请求 URL 和处理请求方法之间的对应关系
作用:用于建立请求 URL 和处理请求方法之间的对应关系
位置:
类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录
方法上,请求 URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径
属性:
value:用于指定请求的URL。它和path属性的作用是一样的
method:用于指定请求的方式
params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样
例如:
params = {"accountName"},表示请求参数必须有accountName
params = {"moeny!100"},表示请求参数中money不能是100
@GetMapping:是一个组合注解,等价于@RequestMapping(method = RequestMethod.GET)
@PostMapping:是一个组合注解,等价于@RequestMapping(method = RequestMethod.POST)
@ResponseBody:告知SpringMVC框架,方法返回的字符串不是跳转是直接在http响应体中返回,不进行视图跳转,直接进行数据响应
@RequestHeader:可以获得请求头信息,相当于web阶段学习的request.getHeader(name)
@RequestHeader注解的属性如下:
value:请求头的名称
required:是否必须携带此请求头
@CookieValue:获得指定Cookie的值
@CookieValue注解的属性如下:
value:指定cookie的名称
required:是否必须携带此cookie
@RequestParam:
(1)不加@RequestParam前端的参数名需要和后端控制器的变量名保持一致才能生效
(2)不加@RequestParam参数为非必传,加@RequestParam写法参数为必传。但@RequestParam可以通过@RequestParam(required = false)设置为非必传。
(3)@RequestParam可以通过@RequestParam(“userId”)或者@RequestParam(value = “userId”)指定传入的参数名。(最主要的作用)
(4)@RequestParam可以通过@RequestParam(defaultValue = “0”)指定参数默认值
(5)如果接口除了前端调用还有后端RPC调用,则不能省略@RequestParam,否则RPC会找不到参数报错
@CrossOrigin
注意:
使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法。
<!--注解的组件扫描-->
<context:component-scan base-package="com.包名"></context:component-scan>