spring常用注解-@Component, @Service, @Repository,@Controller,@Autowired,@Qualifier,@Scope

前言:spring注解,注解后可以被spring框架所扫描并注入到spring容器来进行管理 ,十分方便。


@Component:spring 管理组件的通用形式,可以放在任何类头上,不推荐使用。


@Repository:注解在数据访问层Bean,还可以将数据库操作抛出的原生异常翻译转化为spring的持久层异常。 举例:

  • @Repository(value="goodsDao")注解是告诉Spring,让Spring创建一个名字叫"goodsDao"的GoodsDaoImpl实例。

  • @Repository(value="goodsDao")
    public class GoodsDaoImpl extends BasicDaoImpl implements GoodsDao {
    }
    
  • 当Service需要使用Spring创建的名字叫"goodsDao"的GoodsDaoImpl实例时,就可以使用@Resource(name = "goodsDao")注解告诉Spring,Spring会自动把goodsDao创建好然后注入给goodsDao。

  • @Resource(name = "goodsDao")
    private GoodsDao goodsDao;

@Service:注解在业务逻辑层Bean。 

  • @Service("goodsService")注解是告诉Spring,让Spring创建一个名字叫"goodsService"的GoodsServiceImpl实例。
  • @Service("goodsService")
       public class GoodsServiceImpl implements GoodsService {
    }
  • 当Controller需要使用GoodsServiceImpl的的实例时,需要在Controller只需要声明@Resource(name = "goodsService")来接收由Spring注入的"goodsService",然后Spring会自动创建好的"goodsService",然后注入给Controller
  • @Resource(name = "goodsService")
    private GoodsService goodsService;

@Controller:注解在控制层Bean,也就是是spring-mvc的注解,具有将请求进行转发,重定向的功能。 

  • 使用@Controller注解标识GoodsController之后,就表示要把GoodsController交给Spring容器管理,在Spring容器中会存在一个名字为"goodsController"的Controller,这个名字是根据GoodsController类名首字母小写来取的(如果@Controller不指定value,则默认bean名称为这个类的类名首字母小写)。
  • @Controller
    public class GoodsController {
    }

@Autowired:字面意思为自动装配,用来给指定的字段或方法注入所需的外部资源。

  • @Autowired并消除了Java代码里面的getter/setter与bean属性中的property,并且@Autowired默认按类型匹配的方式,在容器查找匹配的Bean,所以bean名称可以任意取,当有且仅有一个匹配的Bean时,Spring将其注入@Autowired标注的变量中,如果有多个匹配的bean就需要用@Qualifier("")来标识不同的bean(下面@Qualifier会介绍)。
  • @Autowired
    private GoodsService goodsService;

@Qualifier:注入指定bean的名称,有两个匹配的bean及以上会用到,这种情况很少。

  • 由于有两个类实现了GoodsService接口,所以Spring不知道应该绑定哪个实现类,这个时候就要用到@Qualifier注解了

  •  @Service("service1")
     public class GoodsServiceImpl1 implements GoodsService {
     }
    
     @Service("service2")
     public class GoodsServiceImpl2 implements GoodsService {
     }
    
     @Controller
     public class GoodsController {
       @Autowired
       @Qualifier("service1")
       GoodsService goodsService;
     }

@Scope :Spring默认产生的bean是单例(即"singleton")的,如果设置为"prototype"表示原型即每次都会new一个新的出来。

  •   @Controller
      @Scope("prototype")
          public class GoodsController {
      }

@Resource:用来给指定的字段或方法注入所需的外部资源(和@Autowired一样),默认按名称装配,当找不到与名称匹配的bean才会按类型装配;注意:@Resource非spring注解,而是J2EE的注解,写到这里是因为上面我用了此注解,只是给大家多提供一种选择

  •  
    @Resource(name = "goodsService") 
    private GoodsService goodsService;
发布了74 篇原创文章 · 获赞 53 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/m0_37679452/article/details/83108907
今日推荐