【Java从0到架构师(2),Java面试问题
新建一个核心配置文件: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面试问题相关推荐
- 【Java从0到架构师(1),Java中高级面试题总结(全面)
JSP 九大内置对象 MySQL 基础 + 多表查询 [Java从0到架构师]MySQL 基础 MySQL MySQL 的使用步骤 数据库的内部存储细节 GUI 工具 SQL 语句 DDL 语句 DD ...
- 【Java从0到架构师】SpringCloud - Sleuth、Zipkin、Config
SpringCloud 链路追踪组件 Sleuth Zipkin 分布式配置中心 - Config Git + Config 分布式配置中心 Java 从 0 到架构师目录:[Java从0到架构师]学 ...
- 【Java从0到架构师】SpringCloud - Hystrix、Zuul
SpringCloud 基本概念 熔断和降级 服务雪崩效应 服务熔断与降级 - Hystrix SpringBoot 集成 Hystrix 熔断降级服务异常报警通知 重点属性 - 熔断隔离策略.超时时 ...
- 【Java从0到架构师】SpringCloud - Eureka、Ribbon、Feign
SpringCloud 分布式.微服务相关概念 微服务框架构选型 SpringCloud 概述 服务注册与发现 - Eureka 案例项目 Eureka 自我保护机制 微服务调用方式 - Ribbon ...
- 【Java从0到架构师】RocketMQ 使用 - 集成 SpringBoot
RocketMQ 消息中间件 集成 SpringBoot 入门案例 生产消息类型 - 同步.异步.一次性 消费模式 - 集群.广播 延时消息 设置消息标签 设置消息的 Key 自定义属性设置 消息过滤 ...
- 【Java从0到架构师】RocketMQ 使用 - 发送消息、接收消息、特殊消息
RocketMQ 消息中间件 入门案例 NameServer 地址 发送消息 同步发送消息 异步发送消息 一次性发送消息 生产者组.消息封装 接收消息 消费方式:推式消费.拉式消费 消息方式:集群模式 ...
- 【Java从0到架构师】RocketMQ 基础 - 应用、核心组件、安装
RocketMQ 消息中间件 基础知识 消息中间件的应用 异步解耦 削峰填谷 消息分发 RocketMQ 核心组件 RocketMQ 安装 源码安装 修改配置参数 启动 管理控制台安装 测试项目 Ja ...
- 【Java从0到架构师】Dubbo 基础 - 设置启动时检查、直接提供者、线程模型、负载均衡、集群容错、服务降级
Dubbo 分布式 RPC 分布式核心基础 分布式概述 RPC Dubbo Dubbo 入门程序 - XML.注解 部署管理控制台 Dubbo Admin 修改绑定的注册 IP 地址 设置启动时检查 ...
- 【Java从0到架构师】分布式框架通信核心基础 - 序列化(JDK、Protobuf)、远程过程调用 RMI
分布式框架通信核心基础 序列化 JDK 的序列化 JDK 序列化的一些细节 Protobuf 序列化 Protobuf 环境搭建与操作 Protobuf 原理分析 实际数据传输 序列化技术选型 远程过 ...
- 【Java从0到架构师】Nginx 拓展 - HTTPS支持、缓存、Http请求防盗链、限流、高可用(Keepalived)
Nginx HTTPS 支持 SSL 证书 重写 - rewrite Nginx 跨域解决方案 Nginx 开启缓存 Http 请求防盗链 Nginx 限流方案 常见的限流策略 - 计数器算法.漏桶算 ...
最新文章
- 李战java_李战:悟透JavaScript
- Process management of windows
- SQL Server 2005 数据库邮件 使用要点
- 五种方法提高你的智力
- html 圆球的百分比,HTML5 很酷的球形器皿中水波状的进度条
- 微软 azure_在Microsoft Azure上运行Eclipse MicroProfile
- visio中公式太小_时间序列问题中三种常见的计量模型
- ZZFAFA_BilibiliMusic_DownUrl
- 如何使用Movavi Photo Editor 6 for Mac更改图像的背景
- NOD32 V5 企业版部署方案
- 由矢量电子海图构建海底 TINDEM方法研究
- virt-install命令参数
- oracle ora 31644,dmp文件损坏导致ORA-39014 ORA-39029 ORA-31693错误
- 应用层 DNS域名解析服务器 文件传送协议FTP 简单邮件传送协议SMTP 万维网 HTTP超文本协议
- torch.load received a zip file
- java 整数相除 小数点_java整数相除保留小数
- 什么时候用到全排列_【什么情况下要除以一个全排列?举例说明最好,万分感激,】作业帮...
- Ubuntu系统下安装ZEC币服务
- JavaWeb篇之一——使用原生JDBC对数据库进行操作
- android高级工程师应该会的知识
热门文章
- 百度飞浆行人多目标跟踪笔记
- one of the variables needed for gradient computation has been modified by an inplace
- onvif linux
- pyav Invalid data found when processing input (libav.h264: no frame!)
- Proguard 部分类不混淆的技巧
- C++环境测试CPU是否支持MMX,SSE-未完
- 建立FPGA深度学习加速生态圈,为人工智能赋能
- OSPF中 hello报文的 内容
- 前端到后端的整体流程介绍
- python配置文件密码管理_python – 可以在django管理员中实现“下次登录时更改密码”类型功能吗?...