快速入門
相關文章推薦:
HelloSpring
我們要想使用Spring,首先肯定要先導入其jar包,我們只需要在maven配置文件中加入響應的依賴,就會自動下載相應的依賴項,
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
編寫代碼
編寫一個Hello實體類
public class Hello {
public String str;
public String getStr() {
return str;
}
public void setStr(String str) {
System.out.println("set");
this.str = str;
}
@Override
public String toString() {
return "Hello{" +
"str='" + str + '\'' +
'}';
}
}
編寫Spring文件,命名爲beans.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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--使用spring來創建對象-->
<bean id="hello" class="com.zhonghu.pojo.Hello">
<property name="str" value="Spring"/>
</bean>
</beans>
測試
@Test
public void test(){
//解析beans.xml文件 , 生成管理相應的Bean對象
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//getBean : 參數即爲spring配置文件中bean的id .
Hello hello = (Hello) context.getBean("hello");
System.out.println(hello.toString());
}
結果以及總結
- 結果
- 總結
- 在結果中我們可以很清晰的看到,其調用了set方法,也就是說set方法是實現Ioc的基礎。
- Hello對象是誰創建的?——是Spring創建的
- Hello對象的屬性是怎麼設置的?——hello對象的屬性是由Spring容器實現的。
- 這個過程就是控制反轉:
- 控制:誰來控制對象的創建,傳統應用程序是程序員來控制創建的,使用spring後,對象是由spring來創建的
- 反轉:程序本身不創建對象,而是變爲被動接受對象
- 依賴注入:就是利用set方法來進行注入的
IOC創建對象方式
通過無參構造方法來創建
User.java
public class User {
private String name;
public User() {
System.out.println("user無參構造方法");
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("name="+ name );
}
}
beans.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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="user" class="com.zhonghu.pojo.User">
<property name="name" value="kuangshen"/>
</bean>
</beans>
測試
@Test
public void test(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//在執行getBean的時候, user已經創建好了 , 通過無參構造
User user = (User) context.getBean("user");
//調用對象的方法 .
user.show();
}
結果
可以發現,在調用show方法前,User對象就已經通過無參構造初始化了
通過有參構造方法來創建
UserT.java
public class UserT {
private String name;
public UserT(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("name="+ name );
}
}
beans.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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 第一種根據參數名字來設置-->
<bean id="userT" class="com.zhonghu.pojo.UserT">
<!-- name 指參數名-->
<constructor-arg name="name"value="zhonghu"/>
</bean>
<!-- 第二種根骨index參數下標來設置-->
<bean id="userT" class="com.zhonghu.pojo.UserT">
<!-- index值構造方法,下標從0開始 -->
<constructor-arg index="0" value="zhonghu"/>
</bean>
<!-- 第三種 根據參數類型設置 十分不推薦-->
<bean id="useT"class="com.zhonghu.pojo.UserT">
<constructor-arg type="java.lang.String" value="zhonghu"/>
</bean>
</beans>
測試
@Test
public void testT(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserT user = (UserT) context.getBean("userT");
user.show();
}
總結
在配置文件加載的時候。其中管理的對象都已經初始化了
Spring的配置
別名
alias 爲bean設置別名,可以同時設置多個別名
<!--設置別名:在獲取Bean的時候可以使用別名獲取-->
<alias name="userT" alias="userNew"/>
Bean的配置
<!--bean就是java對象,由Spring創建和管理-->
<!--
id 是bean的標識符,要唯一,如果沒有配置id,name就是默認標識符
如果配置id,又配置了name,那麼name是別名
name可以設置多個別名,可以用逗號,分號,空格隔開
如果不配置id和name,可以根據applicationContext.getBean(.class)獲取對象;
class是bean的全限定名=包名+類名
-->
<bean id="hello" name="hello2 h2,h3;h4" class="com.kuang.pojo.Hello">
<property name="name" value="Spring"/>
</bean>
import
一般用於團隊開發,可以將多個配置文件導入合併爲一個。
<import resource="{path}/beans.xml"/>