一.spring的核心api
Spring有如下的核心api
BeanFactory :這是一個工廠,用於生成任意bean。采取延遲加載,第一次getBean時才會初始化Bean
ApplicationContext:是BeanFactory的子接口,功能更強大。(國際化處理、事件傳遞、Bean自動裝配、各種不同應用層的Context實現)。當配置文件被加載,就進行對象實例化。
ClassPathXmlApplicationContext 用於加載classpath(類路徑、src)下的xml,加載xml運行時位置 --> /WEB-INF/classes/...xml
FileSystemXmlApplicationContext 用於加載指定盤符下的xml,加載xml運行時位置 --> /WEB-INF/...xml,通過java web ServletContext.getRealPath() 獲得具體盤符
二.spring的兩種實例化方式
1.使用ApplicationContext方式進行加載
2.使用BeanFactory方式進行加載
第一步 建立Spring工程,並向其中導入必須的jar包
第二步 建立BookDao接口,BookDaoImpl實現類,BookService接口,BookServiceImpl實現類
package com.zk.myspring; public interface BookDao { public void addBook(); }
package com.zk.myspring; public class BookDaoImpl implements BookDao{ @Override public void addBook() { // TODO Auto-generated method stub System.out.println("addBook"); } }
package com.zk.myspring; public interface BookService { public abstract void addBook(); }
package com.zk.myspring; public class BookServiceImpl implements BookService{ //方式一:接口等於實現類 //private BookDao bookDao=new BookDaoImpl(); //方式二:接口+set方法 private BookDao bookdao; //BookService依賴注入 BookDao public void setBookdao(BookDao bookdao) {//依賴注入 this.bookdao = bookdao; } @Override public void addBook() { // TODO Auto-generated method stub //this.bookdao.addBook(); System.out.println("add book"); } }
第三步 創建一個ApplicationContext.xml文件,並在文件中配置BookDao和BookService的bean
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> <!-- 創建Dao --> <!-- 模擬spring執行過程 創建Service實例:BookService bookservice=new BookServiceImpl(); IOC <bean> 創建Dao實例:BookDao bookDao=new BookDaoImpl(); IOC 將dao設置給service:bookservice.setBookDao(bookDao); DI <property> <property> 用於屬性注入 name:bean的屬性名,通過setter方法獲得 ref:另一個bean的id值的引用 --> <!--創建Dao --> <bean id="bookDaoId" class="com.zk.myspring.BookDaoImpl" ></bean> <!-- 創建service 依賴注入bookdaoId--> <bean id="bookServiceId" class="com.zk.myspring.BookServiceImpl"> <property name="bookdao" ref="bookDaoId"></property> </bean> </beans>
最后一步 使用兩種方式實例化bean,我們可以使用ApplicationContext和BeanFactory分別實例化Bean
package com.zk.myspring; import org.junit.Test; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.io.ClassPathResource; public class TestBook { public static void main(String[]args) { //從spring容器中獲得 String path="ApplicationContext.xml"; ApplicationContext ac=new ClassPathXmlApplicationContext(path); BookService bs=(BookService) ac.getBean("bookServiceId"); bs.addBook(); } @Test public void test1(){ //使用BeanFactory實例化 String path="ApplicationContext.xml"; BeanFactory bf=new XmlBeanFactory(new ClassPathResource(path)); BookService bs=(BookService) bf.getBean("bookServiceId"); bs.addBook(); } }
分別運行兩個實例
ApplicationContext運行結果
BeanFactory運行結果
成功
三.自定義工廠
新建一個Spring_003 工程,並加入MyBeanFactory.java、TestBeanFactory.java、UserService.java、UserServiceImpl.java
MyBeanFactory表示自定義工廠
package com.zk.BeanFactory; public class MyBeanFactory { public static UserService createService(){ return new UserServiceImpl(); } }
UserService.java
package com.zk.BeanFactory; public interface UserService { public void addUser(); }
UserServiceImpl.java
package com.zk.BeanFactory; public class UserServiceImpl implements UserService{ @Override public void addUser() { // TODO Auto-generated method stub System.out.println("UserService"); } }
配置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" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="userservice" class="com.zk.BeanFactory.UserServiceImpl"></bean> <!-- <bean id="user" class="com.zk.BeanFactory.User"></bean>--> </beans>
最后寫一個TestBeanFactory.java文件
package com.zk.BeanFactory; import org.junit.Test; public class TestBeanFactory { @Test public void Demo(){ UserService userservice=MyBeanFactory.createService(); userservice.addUser(); } }
執行結果
success