1.不使用Spring的實例:
01.Animal接口對應的代碼:
package cn.pb.dao; /** * 動物接口 */ public interface Animal { //吃飯 String eat(); //睡覺 void sleep(); }
02.Animal接口的實現類Dog對應的代碼:
package cn.pb.dao.impl; /** * animal的實現類 */ import cn.pb.dao.Animal; public class Dog implements Animal{ /** * 無參構造 驗證什么時候實例被創建 */ public Dog(){ System.out.println("dog被實例化了!"); } public String eat() { System.out.println("吃飯的方法"); return null; } public void sleep() { System.out.println("睡覺的方法"); } }
03.測試的代碼:
1 @Test 2 public void test01(){ 3 //之前的一種方式 耦合的! 4 Animal animal=new Dog(); 5 animal.eat(); 6 animal.sleep(); 7 }
2.使用spring解耦的方式 創建applicationContext.xml文件 放在src的根目錄下
01.Animal接口對應的代碼:
package cn.pb.dao; /** * 動物接口 */ public interface Animal { //吃飯 String eat(); //睡覺 void sleep(); }
02.Animal接口的實現類Dog對應的代碼:
package cn.pb.dao.impl; /** * animal的實現類 */ import cn.pb.dao.Animal; public class Dog implements Animal{ /** * 無參構造 驗證什么時候實例被創建 */ public Dog(){ System.out.println("dog被實例化了!"); } public String eat() { System.out.println("吃飯的方法"); return null; } public void sleep() { System.out.println("睡覺的方法"); } }
03.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對象 id就是我們的一個標識 class是對應的實現類,class不能是接口
lazy-init="true" 默認是false 按需加載,就是在getBean的時候才會創建實例
-->
<bean id="dog" class="cn.pb.dao.impl.Dog" ></bean> </beans>
04.測試的代碼:
001.applicationContext.xml放在項目的根路徑下面
@Test public void test02(){ /* * 使用spring 對象交給容器來創建 解耦 * 01.引入jar * 02.創建容器applicationContext.xml * 03.加載spring的配置文件 創建容器 會把容器中所有的bean實例化 * 04.然后從容器中取Bean */ ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); System.out.println("**************"); //因為我們在容器中定義了ID 根據id找到對應的類 Animal dog=(Dog)context.getBean("dog"); dog.eat(); dog.sleep(); }
002.applicationContext.xml放在項目的根路徑下面
@Test public void test03(){ /** * 默認applicationContext.xml放在項目的根路徑下面 * 也可以放在電腦指定的盤符下d:/applicationContext.xml * 使用new FileSystemXmlApplicationContext來創建對象 */ ApplicationContext context=new FileSystemXmlApplicationContext("d:/applicationContext.xml"); System.out.println("*************************"); //因為我們在容器中定義了ID 根據id找到對應的類 Animal dog=(Animal) context.getBean("dog"); dog.eat(); dog.sleep(); }
003.使用BeanFactory來創建容器的時候,不會實例化容器中所有的Bean,
在getBean()才創建對應Bean的對象,按需加載。
@Test public void test04(){ /* * 使用BeanFactory來創建容器的時候,不會實例化容器中的Bean * 在getBean()才創建對應Bean的對象 */ BeanFactory context=new XmlBeanFactory(new ClassPathResource("applicationContext.xml")); System.out.println("*************************"); //因為我們在容器中定義了ID 根據id找到對應的類 Animal dog=(Animal) context.getBean("dog"); dog.eat(); dog.sleep(); }
05.在spring的核心配置文件中 所有的bean默認都是單例模式:
001.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對象 id就是我們的一個標識 class是對應的實現類,class不能是接口 --> <!--配置我們的student對象 lazy-init="true" 默認是false 按需加載--> <bean id="student" class="cn.pb.bean.Student" lazy-init="true"> <property name="name" value="小黑"></property> <property name="age" value="18"></property> </bean> <!-- 在spring的核心配置文件中 所有的bean默認都是單例模式 scope="singleton" 默認 scope="prototype" 原型 --> <bean id="student2" class="cn.pb.bean.Student" scope="singleton"> <property name="age" value="40"/> <property name="name" value="小黑2"/> </bean> </beans>
002.驗證代碼:
/** * 驗證單例模式 * 01.默認是單例 調用同一個對象 輸出true * 02.之后再xml文件中的student2 增加屬性scope="prototype" * 03.再次驗證 兩個對象肯定不一致 輸出false */ @Test public void studentTest5(){ ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); System.out.println("*******************************************"); Student student = (Student) context.getBean("student2"); System.out.println(student); Student student2 = (Student) context.getBean("student2"); //再次獲取 System.out.println(student==student2); }