Spring框架配置beans.xml


Spring學習筆記(一)

一、Spring 框架

Spring 是一個開源框架,是為了解決企業應用程序開發復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個組件,同時為 J2EE 應用程序開發提供集成的框架。

Spring框架由七個模塊組成:核心容器、應用上下文(Context)模塊、Spring的AOP模塊、JDBC抽象和DAO模塊、對象/關系映射集成模塊、Spring的Web模塊、Spring的MVC框架。

介紹傳送門-->http://baike.baidu.com/link?url=ZMgPopo8CSuxoq4cxxCjy600WLc07HP9K4ej4wI4Z07jpfyt82RlOk1MimelYU_tZwn9OyLE_dQVlXNzDm_Fba

 

二、關於學習Spring框架之前自身的疑惑

1 Spring框架是如何對項目進行有效管理的?

 

三、學習開始

3.1 准備好Spring的說明書   http://docs.spring.io/spring/docs/

3.2 准備Spring的JAR包 spring-framework-3.0.0.RELEASE

3.3 先寫一點測試代碼(不使用Spring框架),然后再引入Spring框架進行管理,對比前后者代碼的不同之處

測試代碼邏輯:

1 UserServiceImpl調用 UserDao(接口) 完成對User對象的保存和更新

2 UserDao(接口) 有兩種實現UserDaoImpl和UserDaoImpl2 

 

 

UserServiceImpl

 1 package com.serviceImpl;
 2 
 3 import com.dao.UserDao;
 4 import com.daoImpl.UserDaoImpl;
 5 import com.entity.User;
 6 
 7 public class UserServiceImpl {
 8     private UserDao userDao;
 9 
10     public void add(User user) {
11         userDao = new UserDaoImpl(); //UserDaoImpl實現接口
12         userDao.save(user);
13     }
14 
15     public void modify(User user) {
16         userDao = new UserDaoImpl();//UserDaoImpl實現接口
17         userDao.update(user);
18     }
19 
20     public UserDao getUserDao() {
21         return userDao;
22     }
23     public void setUserDao(UserDao userDao) {
24         this.userDao = userDao;
25     }
26 }

UserDao(接口)

package com.dao;

import com.entity.User;

public interface UserDao {
    public void save(User user);
    public void update(User user);
}

UserDao的實現類UserDaoImp

 1 package com.daoImpl;
 2 
 3 import com.dao.UserDao;
 4 import com.entity.User;
 5 
 6 public class UserDaoImpl implements UserDao{
 7 
 8     public void save(User user) {
 9         System.out.println(user.getName()+"-->"+user.getRemark()+"  save --調用UserDaoImpl!");
10     }
11 
12     public void update(User user) {
13         System.out.println(user.getName()+"-->"+user.getRemark()+"  update --調用UserDaoImpl!");
14     }
15 }

UserDao的另一個實現類UserDaoImpl2

package com.daoImpl;

import com.dao.UserDao;
import com.entity.User;

public class UserDaoImpl2 implements UserDao{

    public void save(User user) {
        System.out.println(user.getName()+"-->"+user.getRemark()+"  save --調用UserDaoImpl2!");
    }

    public void update(User user) {
        System.out.println(user.getName()+"-->"+user.getRemark()+"  update  --調用UserDaoImpl2!");
    }
}

最后給一個測試類(方便使用)

package com.serviceImpl.test;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

import com.entity.User;
import com.serviceImpl.UserServiceImpl;

public class UserServiceImplTest {
    User user;

    @Before
    public void setUp() throws Exception {
        user = new User();
        user.setName("testName");
        user.setRemark("testRemark");
    }

    @Test
    public void testAdd() {
         UserServiceImpl userServiceImpl = new UserServiceImpl();
         userServiceImpl.add(user);
    }

    @Test
    public void testModify() {
         UserServiceImpl userServiceImpl = new UserServiceImpl();
         userServiceImpl.modify(user);
    }
}

測試代碼完成(未使用Spring框架)。

 

執行結果:

testName-->testRemark save --調用UserDaoImpl!
testName-->testRemark update --調用UserDaoImpl!

以上代碼及執行結果可以看出

1 UserDao接口的實現方式是通過UserServiceImpl類里的代碼管理的。

2 如果我們需要改變UserDao接口的實現方式則需要改動UserServiceImpl的代碼 例如

userDao = new UserDaoImpl(); ----> userDao = new UserDaoImpl2(); //UserDaoImpl改成UserDaoImpl2

 

3.4 使用Spring框架進行管理

1 導入spring JAR包

2 在src目錄下創建Beans.xml,剪切spring說明書中的basic structure of XML-based configuration metadata代碼,粘貼進Beans.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="...">
    <!-- collaborators and configuration for this bean go here -->
  </bean>

  <bean id="..." class="...">
    <!-- collaborators and configuration for this bean go here -->
  </bean>

  <!-- more bean definitions go here -->

</beans>

3 對應於我們的項目開始進行Beans.xml的詳細配置(目前寫的Beans.xml 里對接口的注入是通過set方法,是Spring 注入的一種,隨后會詳細介紹)

<?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">
        
  <!--Spring框架beans.xml配置文件的基礎:一個bean和一個對應的類,然后對bean進行統一的管理 -->
           
  <!--userDao的第一種實現方法映射的 bean -> userDaoImpl-->
  <bean id="userDaoImpl" class="com.daoImpl.UserDaoImpl">
  </bean>
  
   <!--userDao的第二種實現方法映射的 bean -> userDaoImpl2-->
  <bean id="userDaoImpl2" class="com.daoImpl.UserDaoImpl2">
  </bean>
  
   <!--UserServiceImpl映射的 bean -> userServiceImpl-->
   <!--在這個bean里 我們來配置userDao的實現類對應的bean,引入property標簽。
     1 name對應當前bean(類)里面的變量名   private UserDao userDao;
     2 ref表示所關聯是哪個bean。 這里我們關聯上userDaoImpl2也就是第二種實現方式 class="com.daoImpl.UserDaoImpl2"3 完成1,2后,我們可以去把com.serviceImpl.UserServiceImpl文件里,原本在代碼里NEW 出實現類的那段話給去掉,spring已經開始進行管理了。
   -->
  <bean id="userServiceImpl" class="com.serviceImpl.UserServiceImpl">
      <property name="userDao" ref="userDaoImpl"> </property>
  </bean>
</beans>

4 刪除UserServiceImpl類里對接口實現方式控制的代碼

package com.serviceImpl;

import com.dao.UserDao;
import com.daoImpl.UserDaoImpl;
import com.entity.User;

public class UserServiceImpl {
    private UserDao userDao;

    public void add(User user) {
//        userDao = new UserDaoImpl(); //已經不需要我們在程序里面再NEW實現類了
        userDao.save(user);
    }

    public void modify(User user) {
//        userDao = new UserDaoImpl();//已經不需要我們在程序里面再NEW實現類了
        userDao.update(user);
    }

    public UserDao getUserDao() {
        return userDao;
    }
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}

5 已經完成了Spring的配置,現在對測試文件UserServiceImplTest進行修改,執行查看效果

package com.serviceImpl.test;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.entity.User;
import com.serviceImpl.UserServiceImpl;

public class UserServiceImplTest {
    User user;

    @Before
    public void setUp() throws Exception {
        user = new User();
        user.setName("testName");
        user.setRemark("testRemark");
    }

    @Test
    public void testAdd() {
         ApplicationContext app = new ClassPathXmlApplicationContext("beans.xml");//通過ClassPathXmlApplicationContext獲取beans.xml信息-->app
         UserServiceImpl UserServiceImpl = (UserServiceImpl)app.getBean("userServiceImpl");//通過app NEW出具體bean對應的類,注意需要轉換類型
         UserServiceImpl.add(user);//調用方法
    }

    @Test
    public void testModify() {
         ApplicationContext app = new ClassPathXmlApplicationContext("beans.xml");
         UserServiceImpl UserServiceImpl = (UserServiceImpl)app.getBean("userServiceImpl");
         UserServiceImpl.modify(user);
    }
}

6 執行結果(UserDao接口的實現為bean里配置的userDaoImpl)

testName-->testRemark  save --調用UserDaoImpl2!

testName-->testRemark  update  --調用UserDaoImpl2!

 

7 如果要更換UserDao的實現,有了spring進行管理,我們只要去對beans.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="userDaoImpl" class="com.daoImpl.UserDaoImpl">
  </bean>
  
  <bean id="userDaoImpl2" class="com.daoImpl.UserDaoImpl2">
  </bean>
  
  <bean id="userServiceImpl" class="com.serviceImpl.UserServiceImpl">
 <property name="userDao" ref="userDaoImpl"> </property>    <!--  修改 ref="userDaoImpl"-->
  </bean>
</beans>

8 再次查看執行的結果(UserDao接口的實現已經更換成userDaoImpl)

testName-->testRemark  save --調用UserDaoImpl!

testName-->testRemark  update --調用UserDaoImpl!

 

9 到此,Spring的部署及簡單應用已經完成。

總結一下

1 Spring 是通過配置beans.xml 來對類和接口進行管理

2 具體的操作:

一 配置beans.xml  並刪除代碼里原本用來管理接口實現的代碼

二 改寫調用的方法 ClassPathXmlApplicationContext("xmlProfile").getBean("beanName");

3 對比原先的測試代碼與用了Spring管理的后測試代碼

一 程序的擴展性變強,只需要通過配置文件便可以進行管理,例如修改接口的實現方式變得非常簡單。

二 程序的可閱讀性提高,不需要進入代碼層面進行閱讀接口實現的方式,只需要在配置文件中查看即可。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM