新建一个核心配置文件:applicationContext.xml


<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="personDao" class="com.mj.dao.impl.PersonDaoImpl"/><bean id="personService" class="com.mj.service.impl.PersonServiceImpl"><property name="dao" ref="personDao"/></bean></beans> 

创建 service 对象:


ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");PersonService service = ctx.getBean("personService", PersonService.class);service.save(new Person()); 

IoC 的一个很重要的作用:解耦,将对象创建的控制权转交给 Spring

耦合:我依赖你,你不见了(或者我不要你了),对我影响很大,我就得改代码。

  • 写代码的方向:解耦、降低耦合性 —> 工厂设计模式

Spring 可以轻松整合日志框架:logback


<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency> 

依赖注入 (Dependency Injection)

==============================================================================================

【Spring 工厂】注入详解 — Set注入(JDK内置类型,用户自定义类型)、构造注入(重载)

常见的注入内容可以分为 3 大类:

  • bean(自定义类型)

  • 基本类型(8 种)、String、BigDecimal

  • 集合类型(数组、Map、List、Set、Properties)

常见的注入方式有 2 种:

  • 基于 setter(属性)

  • 基于 constructor(构造方法)

基于 setter 的注入 - 自定义对象 bean


以下 4 种写法是等价的:

1、先注入一个 personDao 对象,再将 personDao 注入到 personService 中:


<bean id="personDao" class="com.mj.dao.PersonDaoImpl" /><bean id="personService" class="com.mj.service.PersonServiceImpl"><property name="dao"><ref bean="personDao" /></property></bean> 

2、上面的简写写法:


<bean id="personDao" class="com.mj.dao.PersonDaoImpl" /><bean id="personService" class="com.mj.service.PersonServiceImpl"><property name="dao" ref="personDao" /></bean> 

3、注入 personService 对象的同时,注入 dao 对象:


<bean id="personService" class="com.mj.service.PersonServiceImpl"><property name="dao"><bean class="com.mj.dao.PersonDaoImpl"/></property></bean> 

先在根标签加一个命名空间属性:

xmlns:p="http://www.springframework.org/schema/p" 

4、使用命名空间 p 近一步简化写法:


<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:p="http://www.springframework.org/schema/p"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="personDao" class="com.mj.dao.PersonDaoImpl" /><bean id="personService" class="com.mj.service.PersonServiceImpl"p:dao-ref="personDao" /></beans> 

基于 setter 的注入 - 基本类型、String、BigDecimal



<bean id="personService" class="com.mj.service.PersonServiceImpl"><property name="amount" value="66.66" /><property name="age"><value>28</value></property></bean> 

基于 setter 的注入 - 数组、集合类型



<!-- 数组 --><property name="nos"><array><value>11</value><value>22</value><value>33</value></array></property> 
<list><value>11</value><value>22</value><value>33</value></list>

<!-- LinkedHashMap --><property name="friends"><map><entry key="Jack" value="广州"><entry key="Rose" value="北京"><entry key="Larry" value="上海"></map></property> 
<set><value>Java</value><value>Rose</value><value>James</value></set>
[](https://gitee.com/vip204888/java-p7)基于 setter 的注入 - properties---------------------------------------------------------------------------------------------
<props><prop key="football">足球</prop><prop key="baseball">棒球</prop><prop key="shopping">购物</prop></props>
[](https://gitee.com/vip204888/java-p7)基于 constructor 的注入 - 基本类型、String、BigDecimal--------------------------------------------------------------------------------------------------------------

public Person(int age, String name) {

this.age = age;this.name = name;

}

方法 1:指定了参数类型,顺序要和构造方法里参数顺序对应

最后

需要的朋友可以点击:戳这里免费领取

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。


public Person(int age, String name) {this.age = age;this.name = name;} 

方法 1:指定了参数类型,顺序要和构造方法里参数顺序对应


<bean id="personService" class="com.mj.service.PersonServiceImpl">## 最后需要的朋友可以点击:[**戳这里免费领取**](https://gitee.com/vip204888/java-p7)。还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/45a690aa3ee11b20193494de64ae7cb1.png)

【Java从0到架构师(2),Java面试问题相关推荐

  1. 【Java从0到架构师(1),Java中高级面试题总结(全面)

    JSP 九大内置对象 MySQL 基础 + 多表查询 [Java从0到架构师]MySQL 基础 MySQL MySQL 的使用步骤 数据库的内部存储细节 GUI 工具 SQL 语句 DDL 语句 DD ...

  2. 【Java从0到架构师】SpringCloud - Sleuth、Zipkin、Config

    SpringCloud 链路追踪组件 Sleuth Zipkin 分布式配置中心 - Config Git + Config 分布式配置中心 Java 从 0 到架构师目录:[Java从0到架构师]学 ...

  3. 【Java从0到架构师】SpringCloud - Hystrix、Zuul

    SpringCloud 基本概念 熔断和降级 服务雪崩效应 服务熔断与降级 - Hystrix SpringBoot 集成 Hystrix 熔断降级服务异常报警通知 重点属性 - 熔断隔离策略.超时时 ...

  4. 【Java从0到架构师】SpringCloud - Eureka、Ribbon、Feign

    SpringCloud 分布式.微服务相关概念 微服务框架构选型 SpringCloud 概述 服务注册与发现 - Eureka 案例项目 Eureka 自我保护机制 微服务调用方式 - Ribbon ...

  5. 【Java从0到架构师】RocketMQ 使用 - 集成 SpringBoot

    RocketMQ 消息中间件 集成 SpringBoot 入门案例 生产消息类型 - 同步.异步.一次性 消费模式 - 集群.广播 延时消息 设置消息标签 设置消息的 Key 自定义属性设置 消息过滤 ...

  6. 【Java从0到架构师】RocketMQ 使用 - 发送消息、接收消息、特殊消息

    RocketMQ 消息中间件 入门案例 NameServer 地址 发送消息 同步发送消息 异步发送消息 一次性发送消息 生产者组.消息封装 接收消息 消费方式:推式消费.拉式消费 消息方式:集群模式 ...

  7. 【Java从0到架构师】RocketMQ 基础 - 应用、核心组件、安装

    RocketMQ 消息中间件 基础知识 消息中间件的应用 异步解耦 削峰填谷 消息分发 RocketMQ 核心组件 RocketMQ 安装 源码安装 修改配置参数 启动 管理控制台安装 测试项目 Ja ...

  8. 【Java从0到架构师】Dubbo 基础 - 设置启动时检查、直接提供者、线程模型、负载均衡、集群容错、服务降级

    Dubbo 分布式 RPC 分布式核心基础 分布式概述 RPC Dubbo Dubbo 入门程序 - XML.注解 部署管理控制台 Dubbo Admin 修改绑定的注册 IP 地址 设置启动时检查 ...

  9. 【Java从0到架构师】分布式框架通信核心基础 - 序列化(JDK、Protobuf)、远程过程调用 RMI

    分布式框架通信核心基础 序列化 JDK 的序列化 JDK 序列化的一些细节 Protobuf 序列化 Protobuf 环境搭建与操作 Protobuf 原理分析 实际数据传输 序列化技术选型 远程过 ...

  10. 【Java从0到架构师】Nginx 拓展 - HTTPS支持、缓存、Http请求防盗链、限流、高可用(Keepalived)

    Nginx HTTPS 支持 SSL 证书 重写 - rewrite Nginx 跨域解决方案 Nginx 开启缓存 Http 请求防盗链 Nginx 限流方案 常见的限流策略 - 计数器算法.漏桶算 ...

最新文章

  1. 李战java_李战:悟透JavaScript
  2. Process management of windows
  3. SQL Server 2005 数据库邮件 使用要点
  4. 五种方法提高你的智力
  5. html 圆球的百分比,HTML5 很酷的球形器皿中水波状的进度条
  6. 微软 azure_在Microsoft Azure上运行Eclipse MicroProfile
  7. visio中公式太小_时间序列问题中三种常见的计量模型
  8. ZZFAFA_BilibiliMusic_DownUrl
  9. 如何使用Movavi Photo Editor 6 for Mac更改图像的背景
  10. NOD32 V5 企业版部署方案
  11. 由矢量电子海图构建海底 TINDEM方法研究
  12. virt-install命令参数
  13. oracle ora 31644,dmp文件损坏导致ORA-39014 ORA-39029 ORA-31693错误
  14. 应用层 DNS域名解析服务器 文件传送协议FTP 简单邮件传送协议SMTP 万维网 HTTP超文本协议
  15. torch.load received a zip file
  16. java 整数相除 小数点_java整数相除保留小数
  17. 什么时候用到全排列_【什么情况下要除以一个全排列?举例说明最好,万分感激,】作业帮...
  18. Ubuntu系统下安装ZEC币服务
  19. JavaWeb篇之一——使用原生JDBC对数据库进行操作
  20. android高级工程师应该会的知识

热门文章

  1. 百度飞浆行人多目标跟踪笔记
  2. one of the variables needed for gradient computation has been modified by an inplace
  3. onvif linux
  4. pyav Invalid data found when processing input (libav.h264: no frame!)
  5. Proguard 部分类不混淆的技巧
  6. C++环境测试CPU是否支持MMX,SSE-未完
  7. 建立FPGA深度学习加速生态圈,为人工智能赋能
  8. OSPF中 hello报文的 内容
  9. 前端到后端的整体流程介绍
  10. python配置文件密码管理_python – 可以在django管理员中实现“下次登录时更改密码”类型功能吗?...