• Spring常用注解之一


      Spring中的常用注解

      @Component

      把普通 pojo 实例化到 Spring 容器中,相当于配置文件中的

      泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component 来标注这个类

      这个简单的注解表明该类会作为组件类,并告知 Spring 要为这个类创建 bean

      用法:@Component("")

      双引号内的内容为 bean 的 id ,不写的话默认为类名首字母小写

      @Named

      另外一种给 bean 命名的方式,Java依赖注入规范(Java Dependency Injection)中所提供的注解来为 bean 设置 ID

      @Configuration

      表明这个类是一个配置类,可以启动组件扫描,用来将带有@Bean 的实体进行实例化 bean 等

      @Configuration 可理解为用 Spring 的时候 xml 里面的

      标签,作用为配置 Spring 容器(应用上下文)

      用法:将@Configuration 标注在名为 xxxConfig 的配置类上

      @ComponentScan

      包扫描,默认会扫描与配置类相同的包

      用法:@ComponentScan(basePackages = “”)双引号内写要扫描的包的全路径,如果只有一个包 basePackages 可省略

      如果要扫描多个包,只需要将 basePackages 属性设置为要扫描包的一个数组即可

      @ComponentScan(basePackages = {“edu.swpu.service”, “edu.swpu.controller”})

      除了将包设置为简单的 String 类型之外,@ComponentScan 还提供了另外一种方法,那就是将指定为包中,所包含的类或接口,可以考虑在包中创建一个用来进行扫描的空标记接口(marker interface)

      @ComponentScan(basePackagesClasses = {Service.class, Controller.class})

      @Autowired

      自动注入,将一个 bean 中所依赖的其他类型的组件 bean 注入到该 bean 中

      用法:@Autowired 注解不仅能够用在构造器上,还能用在属性的 Setter 方法上,甚至可以直接写在引用类型的成员变量上

      注意:如果没有匹配的 bean 那么在应用上下文创建的时候,Spring 会抛出一个异常,为了避免异常出现,可以将@Autowird 的 required 属性设置为 false,但是需要谨慎对待,如果在你的代码中没有进行 null 检查的话,这个处于未装配状态的属性有可能会出现 NullPointerException

      @Inject

      @Inject 注解来源于 Java 依赖注入规范,该规范同时还为我们定义了@Named 注解

      @Bean

      @Bean 注解会告诉 Spring 这个方法将会返回一个对象,该对象要注册为 Spring 应用上下文中的 bean,方法体中包含了最终产生 bean 实例的逻辑

      默认情况下,bean 的 ID 与带有@Bean 注解的方法名是一样的,如果你想为其设置成一个不同的名字的话,那么可以重命名该方法,也可以通过 name 属性指定一个不同的名字

      用法:@Bean 表示将方法的返回值注册到 Spring 容器中,id 默认为方法名

      @Bean(name = “”) 表示将该方法的返回值注册到 Spring 容器中,id 为 name 属性的值

      @Import

      将另一个配置类导入到标注了该注解的配置类中

      用法:@Import(xxxConfig.class)

      @ImportResource

      将写在 xxx.xml 中的配置文件导入到标注到该注解的配置类中

      用法:@ImpoerResource(“classpath:xxx.xml”) 将在根类路径下的xxx.xml文件中的配置导入到标注了该注解的类中

      @Profile

      指定某个 bean 属于哪个profile

      用法:@Profile(“dev”)

      @ActiveProfiles

      指定运行测试时要激活哪个profile

      用法:@ActiveProfiles(“dev”)

      @Conditional

      条件化配置,如果给定的条件结果为 true,就会创建这个 bean,否则的话,这个 bean 会被忽略

      用法:Conditional(xxx.class)

      @Primary

      在注入的时候,将可选 bean 中的某一个设为首选(primary)的 bean

      用法:@Primary 能够与@Component 组合用在组件扫描的 bean上,也可以与@Bean 组合用在 Java 配置的 bean 声明中。

      @Qualifier

      限定符,指定想要注入进去的是哪个 bean

      用法:@Qualifier(“iceCream”) 表示将 id 为 iceCream 的 bean 注入进来

      @Scope

      选择 bean 创建的作用域

      用法:@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

      @Scope注解中有一个属性,proxyMode,它被设置成了 ScopedProxyMode.INTERFACES ,这个属性解决了将会话或请求作用域的 bean 注入到单例 bean 中所遇到的问题

      如果 bean 累心是具体类的话,我们必须将 proxyMode 属性设置为 ScopedProxyMode.TARGET_CLASS,以此来表明要以生成目标类扩展的方式创建代理

      @PropertySource

      引用类路径中一个文件,这个属性会被加载到 Spring 的 Environment 中,稍后可以从这里检索属性

      用法:@PropertySource(“app.properties”) 表示引用了类路径中一个名为 app.properties 的文件

      @Value

      将我们配置文件的属性读出来

      用法:有@Value(“${}”)和@Value(“#{}”)两种方式

      @Aspect

      该注解表明被标注的类不仅仅是一个 POJO,还是一个切面

      @After

      通知方法会在目标方法返回或抛出异常后调用

      @AfterReturning

      通知方法会在目标方法返回后调用

      @AfterThrowing

      通知方法会在目标方法抛出异常后调用

      @Around

      通知方法会将目标方法封装起来

      @Before

      通知方法会在目标方法调用之前执行

      @Pointcut

      定义切点,为@Pointcut 切点设置的值是一个切点表达式

      用法:

      public class Audience {

      @Pointcut("execution(** concert.Performance.perform(..))")

      public void performance() {}

      @Before("performance()")

      public void silenceCellPhones() {

      System.out.println("Silencing cell phones");

      }

      @Before("performance()")

      public void takeSeats() {

      System.out.println("Taking seats");

      }

      @AfterReturning("performance()")

      public void applause() {

      System.out.println("CLAP CLAP CLAP!!!");

      }

      @AfterThrowing("performance()")

      public void demandRefund() {

      System.out.println("Demanding a refund");

      }

      }

      @EnableAspectJAutoProxy

      在配置类上标注该注解,启用自动代理功能

      @DeclareParents

      将 Encoreable 接口引入到 Performance bean 中

      value 属性指定了哪种类型的 bean 要引入该接口

      defauleImpl 属性指定了为引入功能提供实现的类

      @DeclareParents 注解所标注的静态属性指明了要引入了接口

      Spring MVC中的常用注解

      @EnableWebMvc

      在 Spring MVC 配置类上标注该注解,表示启用 Spring MVC

      @Controller郑州人流医院哪家好 http://www.zhongyuan120.com/

      @Controller 是一个构造型(stereotype)注解,它基于@Component 注解

      用法:标注在在 xxxcontroller 类上,表示该类为 Spring MVC 控制器,并作为组件扫描到 Spring 容器中

      @RequestMapping

      将请求的 URL 映射到整个类或某个特定的方法上

      用法:@RequestMapping("/")

      表示将以 / 开头的请求都映射到标注了该注解的类或方法上

      当控制器在类级别上添加@RequestMapping 注解会应用到控制器的所有控制器方法上。处理器方法上的@RequestMapping 注解会对类级别上的@RequestMapping 的声明进行补充

      @RequestMapping 注解的 value 属性能够接受一个 String 类型的数组

      @RequestParam

      将请求参数绑定到你控制器的方法参数上(是Spring MVC 中接收普通参数的注解)

      用法:标注在方法的参数前面,将请求中的参数与方法参数绑定,如果这些参数在请求中不存在的话,就使用默认值,@RequestParam 注解的 defaultValue 属性可以完成这项任务

      @PathVariable

      将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariable(“xxx“)

      用法:@RequestMapping(value=”user/{id}/{name}”)

      请求路径:http://localhost:8080/user/1/james

      将 1 和 james 绑定到标注了该注解的方法的参数中

      如果@PathVariable 中没有 value 属性的话,它会假设占位符的名称与方法的参数名相同

      @RequestPart

      @RequestPart 这个注解用在 multipart/form-data 表单提交请求的方法上,支持的请求方法的方式MultipartFile,属于 Spring 的 MultipartResolver 类,这个请求是通过http协议传输的

      @ResponseStatus

      将异常映射为 HTTP 状态码

      用法:标注在异常类上,@ResponseStatus(value = HttpStatus.NOT_FOUND, reason = “xxx Not Found”)

      @ControllerAdvice

      控制器通知(controller advice)是任意带有@ControllerAdvice 注解的类,这个类会包含一个或多个如下类型的方法

      @ExceptionHandler

      标注在异常处理类上,来处理指定的异常

      用法:@ExceptionHandler(xxx.class)

      表示处理xxx异常

      @InitBinder

      给 Binder 做初始化,被此注解标注的方法可以对 WebDataBinder 初始化,webDataBinder 是用于表单到方法的数据绑定的

      @ModelAttribute

      当同一个 controller 中有任意一个方法被@ModelAttribute 注解标记,页面请求只要进入这个控制器,不管请求那个方法,均会先执行被@ModelAttribute 标记的方法,所以我们可以用@ModelAttribute 注解的方法做一些初始化操作

  • 相关阅读:
    Nodejs实现爬虫的几种方式
    你不知道的 Node.js 爬虫原来这么简单
    express 框架
    nodejs简单开发web的demo
    nodejs学习(三)函数
    url模块和underscore模块
    nodejs学习(四)GET/POST请求
    nodejs使用http模块写web的request和 response
    直播预告 | 个推TechDay治数训练营来袭!带你入门数据仓库与维度建模
    个推SDK别名功能使用解析:与第三方账号打通,实现精细化推送
  • 原文地址:https://www.cnblogs.com/djw12333/p/12016351.html
Copyright © 2020-2023  润新知