SpringMVC学习笔记(四)springMVC常用注解(二)

SpringMVC学习笔记(四)

1.@Autowire注解

  @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。

 @Service
public class UserService {
    
    
     @Autowired
    private UserRepository userRepository;
   public void save(){
    
    
      userRepository.save();
   }
 }

  比如:这里需要一个UserRepository类型的属性,通过@Autowired自动装配方式,从IoC容器中去查找到,并返回给该属性。
注意事项:
 在使用@Autowired时,首先在容器中查询对应类型的bean
    如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据
    如果查询的结果不止一个,那么@Autowired会根据名称来查找。
    如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false

2.@Resource注解

  @Resource是做bean的注入时使用,@Resource不是Spring所自带的注解,它的jar包是javax.annotation.Resource,该jar包由J2EE提供, 需要JDK1.6及以上,默认按照byName自动注入。@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入。
@Resource有两个重要的属性:
  1.name: Spring将@Resource注解的name属性解析为bean的名字。
  2.type: type属性则解析为bean的类型。
注: 如果使用name属性,则使用byName的自动注入策略,而使用type属性则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
  @Resource装配顺序:
  1.同时指定了name和type的话,先从Spring上下文中找到唯一匹配的bean进行装配,未找到则抛出异常。
  2.假如指定了name,就从Spring上下文中查找名称(id或者name)匹配的bean进行装配,未找到则抛出异常。
  3.假如指定了type,就从Spring上下文中找到类型匹配的唯一bean进行装配,找不到或找到多个,都抛出异常。
  4.如果既没指定name,也没指定type,则自动按照byName方式进行装配。如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

3.@Resource和@Autowire对比

在这里插入图片描述
使用区别:
  (1)@Autowired与@Resource都可以用来装配bean,都可以写在字段或setter方法上。
  (2)@Autowired默认按类型装配,默认情况下必须要求依赖对象存在,如果要允许null值,可以设置它的required属性为false。如果想使用名称装配可以结合@Qualifier注解进行使用。
  (3)@Resource,默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行名称查找。如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

猜你喜欢

转载自blog.csdn.net/qq_46046423/article/details/115090165