內容簡介 spring ioc和xml配置文件實現註入 spring 註解模式實現註入 Java使用框架都需要導入jar包,xml配置需要導入4個核心包,java核心包基本都不提供日記功能,需要導入2個額外日記包,我的spring是4.x版本.導入包如下(下載地址不在這裡發了,百度下載) bean包 ...
內容簡介
- spring ioc和xml配置文件實現註入
- spring 註解模式實現註入
Java使用框架都需要導入jar包,xml配置需要導入4個核心包,java核心包基本都不提供日記功能,需要導入2個額外日記包,我的spring是4.x版本.導入包如下(下載地址不在這裡發了,百度下載)
- spring-beans-4.3.8.RELEASE.jar
- spring-context-4.3.8.RELEASE.jar
- spring-core-4.3.8.RELEASE.jar
- spring-expression-4.3.8.RELEASE.jar
- commons-logging-1.2.jar
- log4j-1.2.17.jar
bean包是標簽包,core是核心包,expression應該是驗證表達式包,context我估計是根據提供的路徑反射生成對象的包,(我學歷不夠,才小學畢業自學的java,自學理解的spring ioc註入,非程式員).
spring 包導入後,需要一個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="cn.panda.model.user">
<constructor-arg ref="book"/>
<constructor-arg type="int" value="21"/>
<bean>
<bean id="book" class="cn.panda.model.book">
<property name="bookname" value="西游記"/>
</bean> </beans>
在一一介紹 bean標簽的關鍵詞
id是一個唯一名稱.命名要規範,前面不能已特殊符號開頭,中間不能有空格這些特殊符號,我一般是用駱駝(UserName)命名法,不知道帕斯卡命名(user_name)行不行.
class 是需要生成的對象的全路徑(cn.panda.userDao)
scope 是生成對象保存在哪裡對象.總共7個屬性,基本用的最多是2個,singleton 單列模式(預設),每次獲取對象都是同一個對象記憶體地址是同一個. prototype是多列模式,每次生成都是新的對象. session. request ,globalssion,application 這幾個是關於HTTP有關的對象(不是很重要,基本很少用或者不用)最後只要知道就可以了websocket.
name 屬性好像是為了相容strut1.x版本和老版本.還有可以使用一些特殊符號的名稱,總體和ID關鍵詞差不多的功能
constructor-arg是對象構造函數註入參數.是bean子節點(可以多個參數節點),裡面有3個比較常用的屬性,ref對應是需要註入的對象id, type 是註入變數名稱如Int,java.lang.String這些, value指定的值.
property 是bean對象子節點的,裡面有個name屬性對應對象的屬性名稱,ref 需要賦值的bean 的ID值,value是指定的值...
下麵是複雜的屬性註入list,map,properties,set (複製官方文檔了)
<bean id="moreComplexObject" class="example.ComplexObject"> <!-- results in a setAdminEmails(java.util.Properties) call --> <property name="adminEmails"> <props> <prop key="administrator">[email protected]</prop> <prop key="support">[email protected]</prop> <prop key="development">[email protected]</prop> </props> </property> <!-- results in a setSomeList(java.util.List) call --> <property name="someList"> <list> <value>a list element followed by a reference</value> <ref bean="myDataSource" /> </list> </property> <!-- results in a setSomeMap(java.util.Map) call --> <property name="someMap"> <map> <entry key="an entry" value="just some string"/> <entry key ="a ref" value-ref="myDataSource"/> </map> </property> <!-- results in a setSomeSet(java.util.Set) call --> <property name="someSet"> <set> <value>just some string</value> <ref bean="myDataSource" /> </set> </property> </bean>
這裡介紹如何靜態方法和工廠方法生成對象.....先寫一段代碼(代碼命名對於java程式員來說不是很規範,以前自學c#,所以有些命名用c#方式命名了)
1 public class A{ 2 public void Hello(){ 3 system.out.println("Hello world"); 4 } 5 } 6 7 8 public class FactoryA{ 9 10 public static A GetA(){ 11 A a=new A(); 12 return a; 13 } 14 } 15 16 public class FactoryB{ 17 public A GetA(){ 18 A a=new A(); 19 return a; 20 } 21 }View Code
如上代碼我們如何獲取A的對象.bean也提供了幾個關鍵詞,我還是在代碼里寫註解和解釋
<!--靜態方法獲取的A的註入生成的對象...class是工廠類的全路徑 ,factory-method是方法名稱--> <bean id="A" class="factoryA" factory-method="GetA"/> <!--IOC註入生成A的對象我們先配置A和需要生成的A的對象factoryB的配置--> <!--factory-bean對應實列工廠的bean名稱--> <bean id="A" factory-bean="factoryB" factory-method="GetA"/> <bean id="factoryB" class="factoryB"/>
最後一個多xml文件引入,因為一個項目不同人開發不同的模塊,可以引入多個xml配置文件
<beans> <import resource="xml文件的路徑"/> <bean id=".." class="..."/> </beans>
spring IOC依賴註入的xml文件比較常用都寫完了,下麵是註解模式.註解模式需要一個引入一個核心包 spring-aop-4.3.8.RELEASE.jar
在配置文件重新編輯約束包,我只寫一些比較常用的註解模式比較全建議看官方文檔.都是英文版
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="cn.panda.*"/> </beans>
可以看到此約束比xml約束多了一個xmlns:context約束和<context:component-scan base-package="cn.panda.*"/> 這個就是表示開啟註解模式...
base-package掃描那個包的註解,多個包可以用,分開如(cn.panda.model,cn.panda.dao)也可以用cn.panda.*表示掃描是cn.panda的包,後面所有的意思.不管你後面是啥都會掃描.
註解4個功能一樣註解的. @Component(實體層),@Service(邏輯處理層),@Controller(web層),@Repository(Dao層).不知道以後spring官方會不會給他們不同的功能,現在功能都差不多.
下麵用一段代碼+加註解可以更好講解比較常用的註解模式.
pakeage cn.panda.model; /*實體層代碼,映射層*/ @Component(value="user") /*scope("singleton") 這裡可以加singelton或者prototye,反正scope的7個不寫預設singelton*/ public class user{ } pakeage cn.panda.dao; /*數據訪問層*/ @Repository(value="userdao") public class userdao(){ public int add(user user){ /*代碼處理邏輯代碼*/ } } pakeage cn.panda.service; @Service(value="userservice") public class userservice{ private cn.panda.dao.userdao userdao; /*@Autowired就是自動註入跟userdao欄位一樣名稱對象,如果不存在userdao就會報錯*/ /*@Resource(name="userdao") 就是指定註入ID的對象.*/ public void cn.panda.dao.userdao setUserdao(cn.panda.dao.userdao userdao){ this.userdao=userdao; } public int add(cn.panda.user user){ return this.userdao.add(user); } } /*這裡介紹@controller 這個註解,一般這個註解是用於web層.詞義是控制器意思*/ @controller /*ActionSuport是stucts2的一個類,我現在木有學到這裡整合對象這些,以後會介紹stucts2*/ public class Index extends ActionSuport{ }
註解還有很多,還有configuration配置.還有引入過濾一些註解.這些暫時不寫了,我感覺作用不怎麼大,所以木有怎麼自學過.
混合模式就是xml加註解模式註入的註意事項,我也不知道正不正確驗證,我也是自學的.註解中指定ID不知道跟xml配置ID不能重覆.第二,xml配置ID可以指定給註解中.