1. 程式人生 > >淺談Spring框架的應用

淺談Spring框架的應用

1.Spring是一個輕量級開源框架.

輕量級:與EJB對比,依賴資源少,銷燬的資源少

2.Spring的核心是控制反轉(IOC)和麵向切面(AOP)

3.Spring的優點:

a.方便解耦:IOC容器,依賴注入方式不必例項化類.
b.AOP程式設計的支援-面向切面程式設計
c.宣告事務的支援
d.整合各種框架
e.方便程式的測試

f.降低Java EE API的使用難度

4.IOC:控制反轉,將物件建立的權利轉移到第三方的容器來管理.通過xml檔案方式獲取物件---體現出解耦

5.如何搭建IOC:
1)導包4(核心)+1(依賴);
dist--libs--:beans、core、context、expression
dependenices(整合後的)--apache.commons--commons.logging--logging-1.1.1.jar
schema--頭部
/*<bean>:狹義: 類中私有屬性的set/get()
  廣義:就是一個實體類*/
2)src下建立配置檔案applicationContext.xml .

    3) 編寫xml設定頭部

6.獲取物件
  //配置這裡的每一個bean,Spring容器都會幫我們建立物件,並且給創建出來的物件取一個唯一的標識(id)-- 自己取,沒要求(建議和屬性名一致)
  //class="全類名"        
   <bean id="userBizId" class="com.qf.biz.impl.UserBizImpl"></bean>  
 //取物件
ApplicationContext context=new ClassPathXmlApplicationContext("xml名稱");
ApplicationContext--beanFactory
        //id:userBizId:通過表示Id獲取物件  

IUserBiz userbiz=(IUserBiz)context.getbean("userBizId");

7.屬性的依賴注入

  依賴:一個物件需要使用另一個物件.
  注入:通過第三方來對另一個物件進行例項化
    eg:BizImpl 類中有DaoImpl的物件作為屬性.
     
    1)UserBizImpl有另一個類物件名稱-userDao
        public class UserBizImpl implements IUserBiz {
private IUserDao userDao;
   2)<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl">
      /*name="userDao":  對應類中需要注入實現的屬性(另一個物件)名稱
       ref="userDaoId":對應引用創建出來的物件的標識id
      */
<property name="userDao" ref="userDaoId"></property>
 </bean>

 <bean id="userDaoId" class="com.qf.dao.impl.UserDaoImpl"></bean>

8.bean的建立:在主配置檔案中去配置
1.預設無參方法的構造---反射
2.靜態工廠:所有方法都static-注入實現的物件需要set/get()
3.例項工廠: 注入實現的物件需要set/get()
//靜態工廠
<!--靜態工廠 -->
<bean id="userDaoId2" class="com.qf.factory.StaticFactory"factorymethod="createUserDao"></bean>
      
<!-- 例項工廠:先建立工廠例項,建立物件 -->
1)<!-- 工廠物件 -->
  <bean id="userDaoFactory" class="com.qianfeng.factory.UserDaoFactory"></bean>
2)<bean id="userDao3" factory-bean="userDaoFactory" factory-method="createUserDaoImpl"></bean>

9.作用域:用於確定spring建立bean例項個數是否是同一個  <bean>標籤屬性 scope
scope="singleton":單例
scope="prototype":多列
預設是單列

10.屬性的自動依賴注入-autowire
autowire:屬性依賴自動注入
      1)autowire="byName":通過名稱來注入,通過類中需要注入實現的物件的名稱與主配置檔案中的bean 的id名稱進行匹配,匹配上就注入
        //以userDao去匹配 id的值,匹配上則找到.
       public class UserBizImpl implements IUserBiz {
  private IUserDao userDao; 
       <bean id="userBizId" class="com.qf.biz.impl.UserBizImpl" autowire="byName">
<!-- <property name="userDao" ref="userDaoId3"></property> -->
  </bean>
       <bean id="userDao" class="com.qf.dao.impl.UserDaoImpl"></bean>

      2)autowire="byType":通過型別來注入,注意點:型別必須唯一(不然報錯,因此只寫一種建立bean).

      3)與class的對映檔案有關:知道找的是哪一個型別。 
//通過型別類匹配,匹配出來的是多個類.
<bean autowire="byType"> 

11.基於註解方式實現bean

1)dist---xsd.config--申明配置--The context schema

2)xml檔案中:只寫這個配置.
<!-- 掃描所有添加了註解的類 -->
<context:component-scan base-package="com.qf">
3)類中:
/*@Component(value="userBiz")*/  //也可以這樣寫元件的註解
@Service(value="userBiz")        //分層的註解
@Scope(value="singleton")
public class UserBizImpl implements IUserBiz {
@Resource(name="userName")  //這裡的userName對應的是UserDaoImpl中對應的userName
private IUserDao userDao;
 
  /*@Autowired     --預設是以byType的方式屬性自動注入
private IUserDao userDao1;*/

}  

@Component(value="userName")
public class UserDaoImpl implements IUserDao{}