Spring 基本概念: 1.什么是spring?有什么用? 2.Spring和其他類似產品的區(qū)別? 3.Spring的特點(優(yōu)缺點)? 4.Spring的內容? 什么是spring?有什么用? Spring就是輕量級的業(yè)務層框架,什么是輕量級:第一,spring的文件大小只有1mb多,第二,資源消耗,占用內存與其他的產品相比較小(如:EJB) 作用:完成業(yè)務層的開發(fā) Spring和其他類似產品的區(qū)別? 輕量級,EJB也是完成業(yè)務層的開發(fā),但是他是重量級的框架,EJB的重點在企業(yè)應用,那么有些程序沒有必要使用重量級的工具來開發(fā)輕量級的應用,這樣成本過大,spring就是滿足完成輕量級應用的業(yè)務層框架 Spring的特點(優(yōu)缺點)? 優(yōu)點: 1.依賴注入(控制反轉):什么是依賴注入?在一個對象需要使用另一個對象的時候,只聲明另一個對象的接口,它的實例在運行時獲得它,作用:就是解決了組件中的耦合,也就是不依賴于固定的對象 2.面向方面編程:什么是面向方面編程?AOP:在預編譯或運行時為程序加入新的功能(如:加入安全,同步,事務等),編程方式采用的是注釋,不用在業(yè)務代碼中寫這些與業(yè)務無關的代碼了,作用:實現業(yè)務與其他代碼分離,解耦合,他完善依賴注入(DI) 3.簡化javaee編程結構:對web的支持(MVC),DAO的支持,ORM的支持 4.類似一站式服務:web,業(yè)務的功能都有,用戶也可以選擇性的使用 Spring的內容? 1.核心模塊:BeanFactory(用來管理bean組件的,相當于bean的容器,通過獨bean的xml文件,可以從中知道bean與bean的依賴關系和bean的實現) 2.AOP:面向方面編程(聲明式中間件服務管理) 3.ORM 4.DAO 5.Web 6.Context:ApplicationContext:作用:增強功能,如:程序國際化等 第一個Spring: 1.下載spring框架 2.解讀spring框架的目錄結構 3.實例1(不使用工具) 4.實例2(eclipse) 5.雜項問題 下載spring框架: 本地: E:\個人數據庫\基本結構\專業(yè)\spring\參考資料\Spring-framework.zip 解讀spring框架的目錄結構: 解壓下載的spring框架: /dist:核心包,spring.jar(工廠文件集合),還有spring.jar的子包,spring-beans.dtd:定義beans.xml的屬性和beans.xml的頭部 /docs:spring api文檔 /lib:spring的編譯和運行所依賴的第三方類庫 實例1(不使用工具): 程序目標:開發(fā)一個spring,功能是顯示hello 方法參數 my name is bean屬性value 1.設置classpath:添加spring.jar and \lib\jakarta-commons\commons-logging.jar 2.創(chuàng)建一個應用目錄:yuchen 3.創(chuàng)建src目錄 4.開發(fā)一個接口和一個類 5.寫配置文件beans.xml:定義這個類,文件的頭部可以去spring-beans.dtd中找到 6.寫客戶端測試類 7.編譯運行 接口: package first; public interface Hello{ public String sayhello(String user); } Bean: package first; public class HelloImp implements Hello{ private String name; public String sayhello(String user){ return "hello, "+user+"my name is: "+this.name; } public void setName(String name){ this.name=name; } } Xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd"> <beans> <bean id="hello" class="first.HelloImp"> <property name="name"> <value>spring</value> </property> </bean> </beans> Test: import org.springframework.core.io.ClassPathResource; import org.springframework.beans.factory.xml.XmlBeanFactory; import first.*; public class TestHello{ public static void main(String [] args){ //1.讀取配置文件,beans.xml:注意beans.xml的寫法:如果放到根目錄 //下,那么直接寫beans.xml,如果放到子目錄下,子目錄名/beans.xml //2.實例化bean工廠對象,載入xml資源:工廠負責管理bean組件的 //目前是管理當前xml資源中的bean //3.通過bean工廠對象得到你要找的bean實例 ClassPathResource resource=new ClassPathResource("beans.xml"); XmlBeanFactory factory=new XmlBeanFactory(resource); Hello hello=(Hello)factory.getBean("hello"); String rst=hello.sayhello("yuchen"); System.out.println(rst); } } D:\yuchen> Javac –d d:\yuchen d:\yuchen\src\*.java D:\yuchen> Javac –d d:\yuchen d:\yuchen\*.java D:\yuchen> java TestHello 實例2(eclipse): 程序目標:測試spring的特性:依賴注入/控制反轉,調用A類的業(yè)務方法,這個方法需要B類方法提供的數據,在A類中,沒有B實例,只有B的接口類型,只依賴它的接口,在運行時獲得B的實例,從而得到其數據 1.新建java工程 2.配置jar:兩個包 3.開發(fā)兩個接口,兩個類 4.寫beans.xml 5.測試類測試 Model接口: package yuchen.beanfactory; public interface Model { public String supportData(); } View接口: package yuchen.beanfactory; public interface View { public void render(); } Model bean: package yuchen.beanfactory; public class AcountModel implements Model { private String ownerName; private double balance; public String supportData() { // TODO Auto-generated method stub return "Acdount : \n"+"ownerName :"+this.ownerName+ "\n balance :"+this.balance; } public void setBalance(double balance) { this.balance = balance; } public void setOwnerName(String ownerName) { this.ownerName = ownerName; } } View bean: package yuchen.beanfactory; public class CommandLineView implements View { private Model model; public void render() { // TODO Auto-generated method stub String rst=model.supportData(); System.out.println(rst); } public void setModel(Model model) { this.model = model; } } beans.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd" > <beans> <bean id="model" class="yuchen.beanfactory.AcountModel"> <property name="ownerName"> <value>tarena</value> </property> <property name="balance"> <value>1000.56</value> </property> </bean> <bean id="view" class="yuchen.beanfactory.CommandLineView"> <property name="model"> <ref bean="model"></ref> </property> </bean> </beans> test: package yuchen.beanfactory; import org.springframework.beans.factory.xml.XmlBeanFactory; import org.springframework.core.io.ClassPathResource; public class Test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub ClassPathResource resource=new ClassPathResource("yuchen/beanfactory/beans.xml"); XmlBeanFactory factory=new XmlBeanFactory(resource); View view=(View) factory.getBean("view"); view.render(); } } 雜項問題: 1.在eclipse中引入xml dtd文件 Windows->preferences->web and xml -> xml catalog Add:uri:要導入的dtd地址 如:spring-beans.dtd Key type:public id Key:例如:-//spring//dtd//en 2.導入log4j 導入:spring/lib/log4j.jar 在根目錄下創(chuàng)建log4j.properties文件,內容從H:\spring-framework- log4j.properties里面拷貝 解決了運行中顯示紅色的log信息的問題 |
|