Spring-注解(2)

方法上的注解

传值

@Value

概述

  • 获取配置文件中的值。
    • 格式:@Value( "${value}" )
  • SpEL表达式
    • 格式:@Value( "#{SpEL}" )

示例

  1. 获取配置文件中的值:

    • java 代码

      @Data
      @AllArgsConstructor
      @NoArgsConstructor
      public class User {
      
         @Value("${jdbcUrl}")
         private String name;
         @Value("${pwd}")
         private Integer age;
      }
      
    • 配置文件 (properties 配置文件)

      jdbcUrl=www.baidu.com
      pwd=123456
      
    • xml 文件

      <context:property-placeholder location="classpath:导入配置文件"/>
      

注意

  1. 需要在 Spring 的配置文件中把 properties 文件导入。
  2. 如果是 Maven 项目,注意资源加载问题。

自动装配

@Autowired

  • 单词读音:欧特 万特

  • 架包:org.springframework.beans.factory.annotation.Autowired

概述

  • @Autowired:先通过 byType 查找,找不到再使用 byName 查找,还是查找会报异常。
  • @Autowired 可以和 @Qualifier() 配合使用,可以指定注入的 bean。
    @Autowired
    @Qualifier(value = "cat")
    private Cat cat;
    

要求:

  • 使用 @Autowired 修饰的属性 要和 bean 的类型一样。

属性

  • @Autowired(required = false):required 为 false 表示当前对象可以为 null。

示例

// java 代码
public class People {

    @Autowired
    private Cat a123;
}

----------------------------------------

// Spring 配置文件

<bean class="com.Test.com.pojo.Cat"/>

@Resource

  • 单词读音:瑞色四
  • 架包:javax.annotation.Resource

概述

  • @Resource 默认按 byName自动注入。

  • @Resource装配顺序:
    ① 如果同时指定了 nametype ,则从 Spring 上下文中找到唯一匹配的 bean 进行装配,找不到则抛出异常。

    • 同时指定了 name 和 type 需要确保两个都能匹配上,不然抛出异常。

    ② 如果指定了 name,则从上下文中查找名称(id)匹配的 bean 进行装配,找不到则抛出异常。
    ③ 如果指定了 type,则从上下文中找到类似匹配的唯一 bean 进行装配,找不到或是找到多个,都会抛出异常。
    ④ 如果既没有指定 name,又没有指定 type,则自动按照 byName 方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

概述

  • @Resource:Java 自带的注解
  • @Resource:先通过 byName 查找,查找不到再通过 byType 查找,还是查找会报异常。

要求:

  • 使用 @Resource 修饰的属性名 要和 beanId 一样。

属性

  • @Resource(name = "beanId"):通过 beanId 指定要注入的 bean。

示例

// java 代码
public class People {

    @Resource
    private Cat a123;
}

----------------------------------------

// Spring 配置文件
<bean id="a123" class="com.Test.com.pojo.Cat"/>

返回指格式转换

@ResponseBody

  • 单词读音:瑞斯剖四 包地

概述

@ResponseBody 注解的作用是将 @Controller 的方法返回的对象通过适当的转换器转换为指定的格式之后,写入 Response 对象的 body 区,通常用来返回 JSON对象 或 XML。

示例

@Controller
public class BooksController {
    @RequestMapping("/hello")
    @ResponseBody
    public String index(){
        return "hello";
    }
}

URL 映射

@RequestMapping

  • 单词读音:瑞快斯特 麦拼

概述

在 SpringMVC 中使用 @RequestMapping 来映射请求,也就是通过它来指定控制器可以处理那些 URL 请求,相当于 Servlet 中在 web.xml 中配置

示例

@Controller
public class BooksController {

   // 接收 /hello 请求
    @RequestMapping("/hello")
    public String index(){
        return "hello";
    }

}

其它

@AliasFor

  • 单词读音:A列斯 f

概述

  • @AliasFor 可以定义一个注解中的两个属性互为别名。

示范

  • @ComponentScan 注解中的两个属性。
public @interface ComponentScan {

	@AliasFor("basePackages")
	String[] value() default {};

	@AliasFor("value")
	String[] basePackages() default {};
}

@Bean

概述

  • 把类注入到 IOC 容器中。
  • 相比于 @Service@Component 等注解注解 更灵活。

示例

// 通过传入的值来选择,要实例化那个 实现类 的对象。
@Bean
public Service add(Integer status){
   switch (status){
      case 1: return new Service01();
      case 2: return new Service02();
      default: return new Service03(); }
}
posted @ 2021-06-24 19:09    阅读(76)  评论(0)    收藏  举报