【Spring 工厂,docker面试题

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程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家

CodeChina开源项目:【一线大厂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程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家

CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

[外链图片转存中…(img-JO6Ilv6I-1630666127104)]

[外链图片转存中…(img-7tOUYoRk-1630666127106)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值