spring(一)

我們在做項目的過程中,有一些所有項目都會用到的服務性的東西,如工廠,connection, session,對象,事務等。這些在任何項目中都需要用到,都需要手動重新編寫代碼。

spring是一個輕量級容器架構,將以上所有項目通用的服務提取出來,做成容器,之後每次需要用到這些服務的時候,直接交給spring管理,開發人員不用再手動編寫代碼。

接下來我們詳細介紹下用 spring 來管理對象:

1. Java中對於對象的處理過程:

(1) new  ------手動編寫代碼 

(2) 通過工廠 new   -------手動編寫代碼

(3) 通過動態代理   --------手動編寫代碼

(4) spring  IOC 框架   -------將對象交給 spring 來處理,開發者不用關注對象的具體處理過程,不用編寫大量代碼

2. idea中使用 spring 的過程:

(1)引入 spring 依賴包   ------- spring.jar        log4j.jar

(2)配置配置文件 applicationContext.xml

(3)用構造函數或者 set 的方式,注入對象

(4) 用 BeanFactory去查找配置文件

我們用代碼來演示:


//接口: UserDao.java

public interface UserDao {

   public void getLogin(String username, String password);
}
//UserDao 的實現類 UserDao4sql.java

public class UserDao4sql implements UserDao {


@Override
public void getLogin(String username, String password) {

   System.out.println("UserDao4sql.getLogin");
}
}
UserDao 的實現類 User4Oracle.java

public class User4Oracle implements UserDao {

@Override
public void getLogin(String username, String password) {

   System.out.println(User4Oracle.getLogin);
}
}
//接口 ManagerTester.java

 public interface ManagerTester {

   public void addUser(String username, String password);
 }
// ManagerTester的實現類 ManagerImmpl.java

public class ManagerImmpl implements ManagerTester {

      private UserDao userDao;
      //構造器的形式注入
      public ManagerImmpl(UserDao userDao) {
           this.userDao = userDao;
      }
    
      //set的形式注入 -------與構造器方式二選一, set注入是最推薦方式
      public void setUserDao(UserDao userDao) {
         this.userDao = userDao;
      }



      @Override
      public void addUser(String username, String password) {

         userDao.getLogin(username,password);
      }

}
//spring配置文件 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:context="http://www.springframework.org/schema/context" 
xsi:schemaLocation="http://www.springframework.org/schema/beans"
 http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.1.xsd">


//真正需要配置的對象對應關係
//id只是一個標識名,可以隨便寫
<bean id="UserDao4sql" class="*.*.*.UserDao4sql"/>
<bean id="UserDao4Oracle" class="*.*.*.UserDao4Oracle"/>


<bean id="ManagerTester" class="*.*.*.ManagerImmpl">

    //用構造器的方式注入 配置
    <constructor-arg ref="UserDao4sql"/>
    //用 set的方式注入 配置
    <property name="userDao" ref="UserDao4sql"/>
</bean>




    
  

需要注意的兩點,第一點是配置文件的配置,第二點是注入的方式。

//測試類 Client.java

public class Client {

    public static void main(String[] args) {

   BeanFactory bean = new ClassPathXmlApplicationContext("applicationContext.xml");
   ManagerTester managerTester = (ManagerTester )bean.getBean("ManagerTester ");
   managerTester .addUser("zhangsan","123456");
  }
}

spring的核心點有兩點,一個是 AOP 一個是 IOC,IOC指的是控制反轉,也就是說所有東西都交給spring管理,不用在代碼中顯示編寫代碼,代碼中需要的話, spring自動注入進去就行。AOP指的是聲明式服務,也就是說所有的管理過程都配置在配置文件中,不用編寫到代碼中。AOP的底層實現式 JDK 的動態代理。橫向切面服務就指的是將所有共有的小服務都拿出來,放在容器中,需要用的時候由spring主動給你。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章