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;

     

  • 2
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页

打赏

七星程序员

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者