幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer

代碼小哥都督 2021-09-18 04:08:04 阅读数:331

搞定 spring 容易 拿到 offer

[獲取資料](
)
[](
)IOC容器創建的兩種方式:
----------------------------------------------------------------------------
**spring容器提供了兩種創建IOC容器**(context或者說是對象工廠beanfactory,其實所謂的容器就是一個對象工廠,獨享工廠幫我們創建我們所需要的對象)**的方法(提供了兩個接口):**
* **通過BeanFactory創建**
特點:IOC容器基本實現,是Spring內部的使用接口,不提供開發人員進行使用.
\*加載配置文件時候不會創建對象,在獲取對象(使用)才去創建對象
* **通過ApplicationContext創建**
特點:BeanFactory.接口的子接口,提供更多更强大的功能,一般由開發人員進行使用
\*加載配置文件時候就會把在配置文件對象進行創建
通過ctrl+H可以查看BeanFactory的繼承結構:
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_後端](https://s2.51cto.com/images/20210918/1631908533878042.jpg)
### [](
)我們來演示一下他們各自創建對象的時機案例:
**BeanFactory:**

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.

@Test

public void UserTest() {

//首先需要加載配置文件

 Resource resource = new ClassPathResource("springConfig.xml");
BeanFactory context = new XmlBeanFactory(resource);

//獲取對象

// User user = context.getBean(“user”, User.class);

// user.show();

}

控制臺並沒有輸出東西.
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_Java_02](https://s3.51cto.com/images/20210918/1631908533686261.jpg)
但是當我們使用容器工廠獲得對象的時候:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

@Test

public void UserTest() {

//首先需要加載配置文件

 Resource resource = new ClassPathResource("springConfig.xml");
BeanFactory context = new XmlBeanFactory(resource);

//獲取對象

 User user = context.getBean("user", User.class);

// user.show();

}

控制臺輸出:
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_程序員_03](https://s3.51cto.com/images/20210918/1631908534752535.jpg)
**ApplicationContext**

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.

@Test

public void UserTest() {

//首先需要加載配置文件

 ApplicationContext context = new ClassPathXmlApplicationContext("springConfig.xml");

//獲取對象

// User user = context.getBean(“user”, User.class);

// user.show();

}

運行控制臺輸出:
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_程序員_04](https://s9.51cto.com/images/20210918/1631908534493128.jpg)
[](
)IOC容器工廠的Bean管理(基於XML方式)
======================================================================================
IOC容器工廠的bean管理其實就是對容器工廠中被托管的對象進行創建對象和對對象屬性賦值的過程.
[](
)對對象的創建其實就是:
--------------------------------------------------------------------------
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_程序員_05](https://s9.51cto.com/images/20210918/1631908535210238.jpg)
### [](
)\*\* 注意:\*\*
[獲取資料](
)
對象的創建默認創建對象**的時候是使用的無參構造的方法**,當我們聲明一個類的時候如果沒有無參和有參構造,那麼會默認給我們創建一個無參構造方法,但是當我們聲明了有構造但是並沒有聲明無參構造的
時候就不會自動的幫我們創建創建一個無參構造\*\*,那麼這個bean是無法進行創建對象的.\*\*
如果我們在User類中添加上屬性name和age,並定義有參構造:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.

package com.yfsn.springframework;

public class User {

private String name;
private Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public void show() {
System.out.println("我已經被spring容器托管的類");
}

}


像這種情况spring的容器工廠並不能幫我們創建User對象:
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_後端_06](https://s7.51cto.com/images/20210918/1631908535442937.jpg)
[](
)DI依賴注入(注入屬性)
---------------------------------------------------------------------------
IOC容器工廠的屬性注入的方式有兩種:
1. set方法注入
2. 有參構造的方法注入
### [](
)set方法注入
使用set注入那麼這個類必須要有set方法.

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.

package com.yfsn.springframework;

public class User {

private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}

//為了測試輸出的toString方法

@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}

}


我們在XML中的set注入操作是:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

<bean id=“user” class=“com.yfsn.springframework.User”>

 <property name="age" value="23"></property>
<property name="name" value="ZYH"></property>
</bean>

注意:set注入的過程也是先創建對象在進行屬性的注入.
測試結果:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.

@Test

public void UserTest() {

//首先需要加載配置文件

 ApplicationContext context = new ClassPathXmlApplicationContext("springConfig.xml");

//獲取對象

 User user = context.getBean("user", User.class);
System.out.println(user);
}

結果:
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_後端_07](https://s7.51cto.com/images/20210918/1631908536352303.jpg)
[獲取資料](
)
### [](
)有參構造的方法注入
有參構造方法那麼需要這個類含有有參構造函數:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

package com.yfsn.springframework;

public class User {

private String name;
private Integer age;
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}

}


XML中的有參構造注入操作是:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

<pre style=“margin: 0px; padding: 0px; overflow: auto; white-space: pre; overflow-wrap: break-word; font-family: “Courier New” !important; font-size: 12px !important;”> <bean id=“user” class=“com.yfsn.springframework.User”>

 <constructor-arg name="name" value="ZYH"></constructor-arg>
<constructor-arg name="age" value="23"></constructor-arg>
</bean></pre>

測試結果:
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_後端_08](https://s3.51cto.com/images/20210918/1631908536719677.jpg)
[](
)接下來在set注入的基礎上學習一些特殊屬性的注入方式:
==========================================================================================
[](
)null值和特殊符號的注入:
-----------------------------------------------------------------------------
XML中的配置:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

<bean id=“user” class=“com.yfsn.springframework.User”>

<!-- null值的注入–>

 <property name="age">
<null></null>
</property>

<!-- 將name的值設置為含有特殊符號的<<>>–>

 <property name="name">
<value><![CDATA[<<南京>>]]></value>
</property>
</bean>

測試結果:
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_程序員_09](https://s2.51cto.com/images/20210918/1631908536301309.jpg)
[](
)外部bean的注入
------------------------------------------------------------------------
[獲取資料](
)
如果我們注入的屬性不再是基本數據類型當然也不是String類型,被注入的屬性也是一個存在於容器工廠中的托管對象,那麼我們就可以使用外部bean的方式進行注入.

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

<!–User托管到容器工廠–>

<bean id="user" class="com.yfsn.springframework.User">
<property name="name" value="ZYH"></property>
<property name="age" value="23"></property>

<!-- 使用外部注入將dog為User的dog屬性進行注入–>

 <property name="dog" ref="dog"></property>
</bean>

<!–Dog托管到容器工廠–>

<bean id="dog" class="com.yfsn.springframework.Dog">
<property name="age" value="1"></property>
<property name="name" value="大黃"></property>
</bean>

測試結果:
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_程序員_10](https://s9.51cto.com/images/20210918/1631908536679196.jpg)
[](
)內部bean的注入:(運用於1對多的關系中)
-------------------------------------------------------------------------------------
我們將User類看成是主人,另外我們再創建一個Dog類

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

package com.yfsn.springframework;

/**

  • @Author ZYH

  • @Date 2021年06月02日 14:22

  • @Version 1.0

*/

public class Dog {

private String name;
private Integer age;
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
", user=" + user +
'}';
}

}


XML中使用內部bean對Dog進行注入的操作是:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

<!–Dog托管到容器工廠–>

<bean id="dog" class="com.yfsn.springframework.Dog">
<property name="age" value="1"></property>
<property name="name" value="大黃"></property>
<property name="user">
<!--User托管到容器工廠-->
<bean id="user" class="com.yfsn.springframework.User">
<property name="name" value="ZYH"></property>
<property name="age" value="23"></property>
</bean>
</property>
</bean>

輸出結果:
[獲取資料](
)
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_Java_11](https://s7.51cto.com/images/20210918/1631908537357405.jpg)
[](
)集合屬性的注入
----------------------------------------------------------------------
我們首先創建User對象,對象的屬性包括list集合,數組,map集合,set集合:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

package com.yfsn.springframework;

import java.lang.reflect.Array;

import java.util.List;

import java.util.Map;

import java.util.Set;

public class User {

private List<String> list;
private String[] habby;
private Map<String, String> map;
private Set<String> set;
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public String[] getHabby() {
return habby;
}
public void setHabby(String[] habby) {
this.habby = habby;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Set<String> getSet() {
return set;
}
public void setSet(Set<String> set) {
this.set = set;
}

}


XML中的注入操作:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

<!-- 集合的注入–>

<bean id="user" class="com.yfsn.springframework.User">
<property name="habby">
<array>
<value>籃球</value>
<value>乒乓球</value>
</array>
</property>
<property name="list">
<list>
<value>java</value>
<value>python</value>
</list>
</property>
<property name="map">
<map>
<entry key="like" value="women"></entry>
<entry key="name" value="YQ"></entry>
</map>
</property>
<property name="set">
<set>
<value>123</value>
<value>345</value>
</set>
</property>
</bean>

測試結果:
![幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_後端_12](https://s4.51cto.com/images/20210918/1631908537218937.jpg)
[獲取資料](
)
[](
)IOC-Bean管理中bean的作用域
----------------------------------------------------------------------------------
bean的作用域也就是托管到容器工程中的bean創建實例的時候是單例的還是多例的,當然,spring容器在默認情况下創建的bean都是單例的,但是我們可以在配置中改變bean的作用域,將它編程多例的:
默認情况下的托管bean:

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.

<!-- 集合的注入–>

<bean id="user" class="com.yfsn.springframework.User">
<property name="habby">
<array>
<value>籃球</value>
<value>乒乓球</value>
</array>
</property>

總結

總體來說,如果你想轉行從事程序員的工作,Java開發一定可以作為你的第一選擇。但是不管你選擇什麼編程語言,提昇自己的硬件實力才是拿高薪的唯一手段。

如果你以這份學習路線來學習,你會有一個比較系統化的知識網絡,也不至於把知識學習得很零散。我個人是完全不建議剛開始就看《Java編程思想》、《Java核心技術》這些書籍,看完你肯定會放弃學習。建議可以看一些視頻來學習,當自己能上手再買這些書看又是非常有收獲的事了。

 CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視頻】

幫你10分鐘搞定Spring,如何才能更容易拿到大廠Offer_後端_13

版权声明:本文为[代碼小哥都督]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210918040804066a.html