System.out.println(person);
}
### [](
)如何进行注入\[开发步骤\]
* 类的成员变量提供 set get 方法
* 配置 spring 的配置文件
<property name="id">
<value>10</value>
</property>
<property name="name">
<value>yusael</value>
</property>
[](
)Spring注入的原理分析(简易版)
-------------------------------------------------------------------------------------
Spring 底层通过**调用对象属性对应的 set 方法**,完成成员变量的赋值,这种方式也称为 **Set注入**。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200521181522851.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_16,color_FFFFFF,t_70)
[](
)Set注入详解
==========================================================================
Set注入的变量类型:
* **JDK内置类型**
8种基本类型 + String、数组类型、set集合、list集合、Map集合、Properties集合。
* **用户自定义类型**
针对于不同类型的成员变量,在`<property`标签中,需要嵌套其他标签:
xxxxx
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020052118232073.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_16,color_FFFFFF,t_70)
[](
)JDK内置类型
--------------------------------------------------------------------------
### [](
)String+8种基本类型
<value>10</value>
<value>yusael</value>
### [](
)数组
<list>
<value>abc@qq.com</value>
<value>123@qq.com</value>
<value>hello@qq.com</value>
</list>
### [](
)Set集合
<set>
<value>138xxxxxxxxxx</value>
<value>139xxxxxxxxxx</value>
<value>138xxxxxxxxxx</value><!--set会自动去重-->
</set>
### [](
)List集合
<list>
<value>China</value>
<value>Earth</value>
<value>hell</value>
</list>
### [](
)Map集合
<map>
<entry>
<key><value>hello</value></key>
<value>12312312312</value>
</entry>
<entry>
<key><value>world</value></key>
<value>21314214214</value>
</entry>
</map>
### [](
)Properites
<props>
<prop key="key1">value1</prop>
<prop key="key2">value2</prop>
<prop key="key3">value3</prop>
</props>
### [](
)复杂JDK类型(Date、…)
需要程序员自定义类型转换器,处理。
[](
)用户自定义类型
--------------------------------------------------------------------------
### [](
)第一种方式
\[开发步骤\]:
* 为成员变量提供 set get 方法
* 配置文件中进行注入(赋值)
<property name="userDAO">
<bean class="com.yusael.dao.UserDAOImpl"/>
</property>
### [](
)第二种方式
第⼀种赋值方式存在的问题:
1. 配置文件代码冗余;
2. 被注入的对象 (UserDAO)多次创建,浪费(JVM)内存资源。
\[开发步骤\]:
* 为成员变量提供 set get 方法;
* 配置文件中进行配置;
<property name="userDAO">
<ref bean="userDAO"/>
</property>
Spring4.x 废除了 `<ref local=""/>` 基本等效 `<ref bean=""/>`;
[](
)Set注入的简化
---------------------------------------------------------------------------
### [](
)基于属性的简化
JDK 类型注入:
<value>10</value>
JDK类型注入简化:`value` 属性只能简化 8种基本类型 + String 注入标签;
* * *
用户自定义类型注入:
<property name="userDAO">
<ref bean="userDAO"/>
</property>
用户自定义类型注入简化:
<property name="userDAO" ref="userDAO"/>
### [](
)基于p命名空间的简化
JDK 类型注入:
<property name="id">
<value>10</value>
</property>
<property name="name">
<value>yusael</value>
</property>
JDK 类型注入 - 基于p命名空间的简化。
<bean id=“person” name=“p” class=“com.yusael.basic.Person”
p:name=“yusael” p:id=“10”/>
* * *
用户自定义类型注入:
<property name="userDAO">
<ref bean="userDAO"/>
</property>
用户自定义类型注入 - 基于p命名空间的简化。
<bean id=“userService” class=“com.yusael.service.UserServiceImpl”
p:userDAO-ref=“userDAO”/>
[](
)构造注入
=======================================================================
* **注入**:通过 Spring 的配置文件,为成员变量赋值;
* **Set注入**:Spring 调用 **Set 方法** 通过 配置文件 为成员变量赋值;
* **构造注入**:Spring 调用 **构造方法** 通过 配置文件 为成员变量赋值;
[](
)构造注入开发
-------------------------------------------------------------------------
* 提供有参构造方法
public class Customer {
private String name;
private int age;
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", age=" + age +
总结
这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家
e String name;
private int age;
public Customer(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Customer{" +
"name='" + name + '\'' +
", age=" + age +
总结
这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家
[外链图片转存中…(img-JO6Ilv6I-1630666127104)]
[外链图片转存中…(img-7tOUYoRk-1630666127106)]