当前位置: 首页 > news >正文

网站制作出租辽宁建设厅勘察设计网站

网站制作出租,辽宁建设厅勘察设计网站,分销系统开发多少钱,网站系统开发流程前言: 我们在进行web开发时,基本上一个接口对应一个实现类,比如IOrderService接口对应一个OrderServiceImpl实现类,给OrderServiceImpl标注Service注解后,Spring在启动时就会将其注册成bean进行统一管理。在Co…

前言:        

        我们在进行web开发时,基本上一个接口对应一个实现类,比如IOrderService接口对应一个OrderServiceImpl实现类,给OrderServiceImpl标注@Service注解后,Spring在启动时就会将其注册成bean进行统一管理。在Controller层需要使用到Service层的服务组件时,就通过@Autowired@Resource等注解标注接口,Spring会自动为我们注入接口的实现类。

       OrderController:

@RestController
@RequestMapping("/order")
public class OrderController{@AutowiredIOrderService orderService;@GetMapping("{id}")public Order getOrder(@PathVariable("id") Integer id){return orderService.getOrderById(id);}}

        OrderServiceImpl:

@Service
public class OrderServiceImpl implements IOrderServiceImpl{@AutowiredOrderDao orderDao;@Overridepublic Order getOrderById(Integer id){if(id != null)orderDao.getById(id);}}

        在IOrderService接口只有一个实现类:OrderServiceImpl时,这么写当然没有问题。如果我们编写了多个IOrderService接口的实现类,在不同场景需要使用不同实现类,这么写还能行吗?肯定不能!

        原因:@Autowired注解注入的方式是by type按类型注入,一个接口如果存在多个实现类,Spring将不知道应该注入哪个实现类,在启动阶段就会报错。

        @Autowired:

​
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {boolean required() default true;
}​

        其中还有一个required属性,默认为true,表示强制要求Bean实例的注入,如果IOC容器不存在对应类型的Bean,Spring启动时就会报错。

解决方案:

        (1)在使用@Service注解配置实现类时,声明bean的名称,并使用@Qualifier注解注入对应的实现类。

        OrderServiceImpl1:

//指定名称
@Service("orderServiceImpl1")
public class OrderServiceImpl implements OrderService {@Overridepublic String sayHello() {return "实现类1 say Hello";}}

        OrderServiceImpl2:

//指定名称
@Service("orderServiceImpl2")
public class OrderServiceImpl2 implements OrderService {@Overridepublic String sayHello() {return "实现类2 say Hello";}
}

        OrderController:

@RestController
@RequestMapping("/order")
public class OrderController {@Autowired@Qualifier("orderServiceImpl1")//使用指定名称的bean示例作为实现类OrderService orderService;@GetMapping("/test")public String test(){return orderService.sayHello();}}

        启动Spring,并使用Postman测试接口,测试结果:

       修改Qualifier注解为:@Qualifier("orderServiceImpl2"),重启Spring,再次测试接口,测试结果:

        可以看到Spring容器为OrderService接口注入了不同的实现类。

        (2)使用@Resource注解。

        OrderController:

@RestController
@RequestMapping("/order")
public class OrderController {@Resource(name = "orderServiceImpl2") //指定使用哪一个bean作为实现类OrderService orderService;@GetMapping("/test")public String test(){return orderService.sayHello();}}

        测试结果:

        原理:@Resource注解默认的注入方式是by name按名称注入,如果你只是单纯使用@Resource注解,而不指定其属性,那么它默认会匹配字段名。如下

@RestController
@RequestMapping("/order")
public class OrderController {//默认匹配bean名称为orderService的bean示例@ResourceOrderService orderService;/*默认匹配bean名称为service的bean示例@ResourceOrderService service;*/@GetMapping("/test")public String test(){return orderService.sayHello();}}

        补充:如果by name注入失败,那么它会通过by type继续尝试注入。当然,如果此时存在多个实现类,Spring会在启动阶段报错。

        报错:No qualifying bean of type 'com.hammajang.springbootdemo.service.OrderService' available: expected single matching bean but found 2: orderServiceImpl,orderServiceImpl2

        这里意指通过by name没有匹配到bean实例,尝试通过by type时匹配到了两个bean实例,Spring不知道注入哪个bean实例。

        以上就是本文的全部内容,如果你有所收获,不妨点个赞!

http://www.yayakq.cn/news/713885/

相关文章:

  • 济南高端网站建设公司网站被封了怎么办
  • 太原seo网站排名做页面设计的软件
  • 月付商城网站建站河北邢台刚刚发布的紧急通知
  • 网站和软件有什么区别宁波网站推广优化联系电话
  • 郑州电力高等专科学校电话南京seo推广公司
  • 网站建设需要多大的服务器网站怎么做图片转链
  • 做企业网站设计方案wordpress收录慢
  • 四川省住房建设厅网站进不去房产网站内容建设规划
  • 网站 手机版网站用户建设的设计与实现
  • 网站开发的方法和步骤网站域名如何使用
  • 家居公司网站建设方案ppt办公室装修效果图图片
  • 做ppt的图片素材网站网站策划的内容包含了什么?
  • 学做网网站论坛小程序++wordpress
  • 省直部门门户网站建设长春大学
  • 大沥网站开发房产最新消息今天新闻
  • 南宁网站制作公wordpress文章总是被修改
  • 佛山网站建设哪家评价高网站如何生成app
  • 手机网站 跳转wordpress分类设置主题
  • 谁知道陕西省建设监理协会的网站求网站都懂得
  • 合肥大型网站建设医疗云网站建设
  • 网站图片加载顺序51个人网站
  • 怎样做网站赚钱wordpress 不能提交评论
  • 展会网站建设老河口市建设局网站
  • 网站开发方案及报价单什么做直播网站好
  • 广州网站建设咨询电话手机网站模版
  • 织梦网站footer美化东莞大岭山做网站公司
  • 彩票网站 在哪里做专注专业网站建设
  • wordpress别名404河南seo和网络推广
  • 检察门户网站建设自查报告wordpress的主题是什么意思
  • 扬中网站学信网登录