一、創(chuàng)建第一個spring項目
1.1、導入Jar包
注 : spring 需要導入commons-logging進行日志記錄 . 我們利用maven , 他會自動下載對應的依賴項 .
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.10.RELEASE</version>
</dependency>
1.2、編寫代碼
- 1、編寫一個Hello實體類
public class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void show(){
System.out.println("Hello,"+ name );
}
}
- 2、編寫我們的spring文件 , 這里我們命名為beans.xml,官方默認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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--bean就是java對象 , 由Spring創(chuàng)建和管理
id:對象名 class:類的地址,指定需要創(chuàng)建和管理的對象
property:屬性
-->
<bean id="hello" class="com.kuang.pojo.Hello">
<property name="name" value="Spring"/>
</bean>
</beans>
- 3、測試,從spring容器中獲取對象
@Test
public void test(){
//解析beans.xml文件 , 生成管理相應的Bean對象
// 通過xml的方式獲取spring上下文,xml可傳入多個
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//getBean : 參數(shù)即為spring配置文件中bean的id .
Hello hello = (Hello) context.getBean("hello");
hello.show();
}
結論
1、Hello 對象是誰創(chuàng)建的 ?
hello 對象是由Spring創(chuàng)建的2、Hello 對象的屬性是怎么設置的 ?
hello 對象的屬性是由Spring容器設置的這個過程就叫控制反轉 :
控制 : 誰來控制對象的創(chuàng)建 , 傳統(tǒng)應用程序的對象是由程序本身控制創(chuàng)建的 , 使用Spring后 , 對象是由Spring來創(chuàng)建的
反轉 : 程序本身不創(chuàng)建對象 , 而變成被動的接收對象 .
依賴注入 : 就是利用set方法來進行注入的,當hello實體類刪除set方法時將無法進行屬性設置
IOC是一種編程思想,由主動的編程變成被動的接收
二、多個bean的托管,有組合關系的bean用spring進行托管,進一步理解ioc思想
我們在案例一的beans.xml增加對bean的配置,在對UserServiceImpl這個類進托管的時候設置不同的userDao屬性指向來實現(xiàn)調(diào)用不同的實現(xiàn),這樣就和之前通過set方式實現(xiàn)ioc達到了相同的效果
<?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="MysqlImpl" class="com.kuang.dao.impl.UserDaoMySqlImpl"/>
<bean id="OracleImpl" class="com.kuang.dao.impl.UserDaoOracleImpl"/>
<bean id="ServiceImpl" class="com.kuang.service.impl.UserServiceImpl">
<!--注意: 這里的name并不是屬性 , 而是set方法后面的那部分 , 首字母小寫-->
<!--引用另外一個bean , 而是用 ref,通過不同的ref來指定指向不同的實現(xiàn)-->
<property name="userDao" ref="OracleImpl"/>
</bean>
</beans>
- 測試
@Test
public void test2(){
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
UserServiceImpl serviceImpl = (UserServiceImpl) context.getBean("ServiceImpl");
serviceImpl.getUser();
}
至此,要實現(xiàn)不同的操作 , 只需要在xml配置文件中進行修改 ,
***所謂的IoC: : 對象由Spring 來創(chuàng)建 , 管理 , 裝配 ! ***