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

360网站建设官网工程信息造价

360网站建设官网,工程信息造价,电子网站有哪些,网站建设流程及构架1.先了解什么是AutowiredAutowired 是 Spring 框架中用于实现依赖自动注入的核心注解。它通过类型匹配自动装配 Spring 容器中的 Bean,极大简化了依赖管理。2.使用Autowired的场景2.1 Autowired的使用1.首先有BookDao、BookDaoImpl、BookService、BookServiceImpl、…

1.先了解什么是@Autowired

  @Autowired 是 Spring 框架中用于实现依赖自动注入的核心注解。它通过类型匹配自动装配 Spring 容器中的 Bean,极大简化了依赖管理。

2.使用@Autowired的场景

  2.1 @Autowired的使用

    1.首先有BookDaoBookDaoImplBookServiceBookServiceImplApp 

public interface BookDao {public void save();
}
@Repository
public class BookDaoImpl implements BookDao {public void save() {System.out.println("book dao save ..." );}
}
public interface BookService {public void save();
}
@Service
public class BookServiceImpl implements BookService {private BookDao bookDao;public void setBookDao(BookDao bookDao) {this.bookDao = bookDao;}public void save() {System.out.println("book service save ...");bookDao.save();}
}
//测试
public class App {public static void main(String[] args) {AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);BookService bookService = ctx.getBean(BookService.class);bookService.save();}
}

2.运行main方法肯定会有错误

        出现问题的原因是,在BookServiceImpl类中添加了BookDao的属性,并提供了setter方法,但是目前是没有提供配置注入BookDao的,所以bookDao对象为Null,调用其save方法就会报控指针异常

3.对于这个问题使用注解该如何解决?

        有很多种解决方式,本次我们使用@Autowired

(1) 在BookServiceImpl类的bookDao属性上添加@Autowired注解

@Service
public class BookServiceImpl implements BookService {@Autowiredprivate BookDao bookDao;//     public void setBookDao(BookDao bookDao) {
//        this.bookDao = bookDao;
//    }public void save() {System.out.println("book service save ...");bookDao.save();}
}

注意:

  • @Autowired可以写在属性上,也可也写在setter方法上,最简单的处理方式是写在属性上并将setter方法删除掉(使用XML 配置注入必须要有set方法)

  • 为什么setter方法可以删除呢?

    • 自动装配基于反射设计创建对象并通过暴力反射为私有属性进行设值

    • 普通反射只能获取public修饰的内容

    • 暴力反射除了获取public修饰的内容还可以获取private修改的内容

    • 所以此处无需提供setter方法

(2)@Autowired是按照类型注入,那么对应BookDao接口如果有多个实现类,比如有BookDaoImpl2、BookDaoImpl2

@Repository
public class BookDaoImpl1 implements BookDao {public void save() {System.out.println("book dao save ...2");}
}
@Repository
public class BookDaoImpl2 implements BookDao {public void save() {System.out.println("book dao save ...2");}
}

这个时候再次运行App,就会报错

此时,按照类型注入就无法区分到底注入哪个对象,解决方案:按照名称注入

  • 先给两个Dao类分别起个名称

    @Repository("bookDao")
    public class BookDaoImpl implements BookDao {public void save() {System.out.println("book dao save ..." );}
    }
    @Repository("bookDao2")
    public class BookDaoImpl2 implements BookDao {public void save() {System.out.println("book dao save ...2" );}
    }

    此时就可以注入成功,但是得思考个问题:

    • @Autowired是按照类型注入的,给BookDao的两个实现起了名称,它还是有两个bean对象,为什么不报错?

    • @Autowired默认按照类型自动装配,如果IOC容器中同类的Bean找到多个,就按照变量名和Bean的名称匹配因为变量名叫bookDao而容器中也有一个booDao,所以可以成功注入。

     分析下面这种情况是否能完成注入呢?

@Service
public class BookServiceImpl implements BookService {@Autowiredprivate BookDao bookDao;}
@Repository("bookDao1")
public class BookDaoImpl implements BookDao {public void save() {System.out.println("book dao save ..." );}
}
@Repository("bookDao2")
public class BookDaoImpl2 implements BookDao {public void save() {System.out.println("book dao save ...2" );}
}
不行,因为按照类型会找到多个bean对象,此时会按照bookDao名称去找,因为IOC容器只有名称叫bookDao1bookDao2,所以找不到,会报NoUniqueBeanDefinitionException
2.2 注解实现按照名称注入

当根据类型在容器中找到多个bean,注入参数的属性名又和容器中bean的名称不一致,这个时候该如何解决,就需要使用到@Qualifier来指定注入哪个名称的bean对象。

@Service
public class BookServiceImpl implements BookService {@Autowired@Qualifier("bookDao1")private BookDao bookDao;public void save() {System.out.println("book service save ...");bookDao.save();}
}

@Qualifier注解后的值就是需要注入的bean的名称。

注意:@Qualifier不能独立使用,必须和@Autowired一起使用


文章转载自:

http://ex63Mvvt.btbLm.cn
http://blkB0bp2.btbLm.cn
http://FOYJlHEH.btbLm.cn
http://nxD9puVC.btbLm.cn
http://eQaC8XGU.btbLm.cn
http://ZxAJBTmU.btbLm.cn
http://4PoOy1WP.btbLm.cn
http://pzd0InvK.btbLm.cn
http://9dNI2KGi.btbLm.cn
http://sb3hrnjQ.btbLm.cn
http://vGMF9fse.btbLm.cn
http://Ue43pZnW.btbLm.cn
http://zUguNpqM.btbLm.cn
http://JXYM0AdV.btbLm.cn
http://Euh06j9o.btbLm.cn
http://1nOM8ozz.btbLm.cn
http://cbrdoOEk.btbLm.cn
http://reLMEtXZ.btbLm.cn
http://VwyKKqDm.btbLm.cn
http://bqp8cJTt.btbLm.cn
http://jNxCXjaB.btbLm.cn
http://sUTl7MrM.btbLm.cn
http://UBpC27R2.btbLm.cn
http://ITN48syW.btbLm.cn
http://LWF3cHWu.btbLm.cn
http://QJuy3dSm.btbLm.cn
http://tNrJw4dA.btbLm.cn
http://58DUyFas.btbLm.cn
http://CokbHgxV.btbLm.cn
http://kyUa4E2n.btbLm.cn
http://www.dtcms.com/wzjs/611101.html

相关文章:

  • 怎样建设自己网站网页设计培训 周末双休
  • 网站反向链接wordpress字体图标
  • 亚马逊电商平台郑州seo优化公司
  • 深圳做微信网站多少钱edge打开是2345网址导航
  • 做网站许昌做猎头顾问 经常看哪些网站
  • 网站编辑难做吗一个电子商务网站的用户购买行为监测报告文档格式怎么做?
  • 网站建设需求列表淮南查查网
  • 做外贸必备网站酒店管理专业建设规划
  • 济南做外贸的网站公司如何去掉wordpress作者链接
  • 做京东一样的网站网站建设维护什么意思
  • 网站有些什么内容wordpress自定义进入后台地址
  • 网站建设 服务流程女孩更严重的新冠异常
  • 专业的企业智能建站比较好深圳比较有名的外贸公司
  • 风机 东莞网站建设视觉设计工作室
  • 有哪几种语言做的网站网站建设与开发定制
  • 谷德设计网站免费咨询律师在线
  • 网站框架优化百度做网站需要多少钱
  • 网站建设 运维 管理包括哪些ps怎样做网站首页图
  • 网页设计作品到哪个网站网站底部浮动
  • 东兴移动网站建设旅游网站的市场需求怎么做介绍
  • 搭建网站免费空间网站开发技术服务合同
  • 淮安网站建设方案学院网站建设作用
  • 织梦 网站搬家网站第三方统计代码
  • 校园二手物品交易网站开发背景常州建站网站模板
  • 没有网站百度推广吗网站建设顶部图片
  • 彩票网站开发系统哪个网站可以做相册
  • 教育网站颜色泉州网络公司
  • 网站建设项目选题wordpress需要 伪静态
  • 网站漂浮广告怎么做长春招聘会最新招聘时间
  • 注册公司查名字哪个网站网站开发合同免费模板