spring快速入門(二)

1、在spring快速入門(一)的基礎上,咱們來了解spring是如何解決對象的建立以及對象之間的依賴關係的問題 (好比client中依賴UserAction的具體實現,UserActionImpl中依賴UserDao的具體實現問題)

  一、建立一個java項目、項目結構以下圖:html

   

  項目具體的搭建步驟以下:java

  1.   首先咱們想要使用spring框架,固然建立好項目後,須要導入jar包,該項目使用的版本爲 spring-framework-2.0-with-dependencies

      因爲咱們暫時還用不到spring全部的功能,因此須要哪一些功能就導入想要的jar就好了。解壓spring資源包後,添加下面的響應jar包到項目中。假設根目錄爲SPRING_HOMEmysql

      spring的依賴包配置
            * SPRING_HOME/dist/spring.jar   (核心jar包)
            * SPRING_HOME/lib/log4j/log4j-1.2.14.jar   (spring依賴的日誌包)
            * SPRING_HOME/lib/jakarta-commons/commons-logging.jar  (該包的做用是當存在log4j-1.2.14.jar 時,使用log4j-1.2.14日誌記錄,當該包不存在時,使用jdk的日誌記錄,若是jdk的日誌不存在,則使用spring的日誌記錄)web

  2.   提供spring的配置文件applicationContext.xmlspring

  3.     提供log4j.properties配置文件 sql

   4.   在UserActionImpl中提供構造函數,讓spring將UserDao實現注入(DI)過來
apache

  5.  讓spring管理咱們對象的建立和依賴,必須將依賴關係配置到spring的核心配置文件中oracle

  6.    編寫咱們的客戶端
app

  Client代碼: 框架

package com.murong.client;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.murong.action.UserAction;
import com.murong.action.UserActionImpl;

public class Client {
    
    public static void main(String[] args) {
        
        BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserAction userAction = (UserAction) bf.getBean("userActionImpl");
        userAction.addUser("久伴",24);
    }
}

  UserAction:  

package com.murong.action;

public interface UserAction {
        //添加用戶
        public void addUser(String name,int age);
}

  UserActionImpl:

package com.murong.action;

import com.murong.dao.UserDao;
import com.murong.dao.UserDaoMysqlImpl;
import com.murong.dao.UserDaoOracleImpl;

public class UserActionImpl implements UserAction{

    private UserDao userDao;
    
    public UserActionImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void addUser(String name, int age) {
        
        userDao.addUser(name, age);
    }

}

  UserDao:

package com.murong.dao;

public interface UserDao {
    
    //添加用戶
    public void addUser(String name,int age);
}

 

  UserDaoMysqlImpl:

 

package com.murong.dao;

public class UserDaoMysqlImpl implements UserDao {

    @Override
    public void addUser(String name, int age) {
        System.out.println("mysql添加用戶成功"+"用戶名稱:"+name+"年齡:"+age);
    }
}

   UserDaoOracleImpl

package com.murong.dao;

public class UserDaoOracleImpl implements UserDao {

    @Override
    public void addUser(String name, int age) {
        System.out.println("oracle添加用戶成功"+"用戶名稱:"+name+"年齡:"+age);
    }
}

  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:aop="http://www.springframework.org/schema/aop"
         xmlns:tx="http://www.springframework.org/schema/tx"
         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
     
     <bean id="userDaoMysqlImpl" class="com.murong.dao.UserDaoMysqlImpl"/> 
  
      <bean id="userDaoOracleImpl" class="com.murong.dao.UserDaoOracleImpl"/> 
      
      <bean id="userActionImpl" class="com.murong.action.UserActionImpl">
          <!-- mysql的實現 -->
          <constructor-arg ref="userDaoMysqlImpl"/>
          <!-- oracle的實現 -->
          <!-- <constructor-arg ref="userDaoOracleImpl"/> -->
      </bean> 
</beans>

 

   log4j.properties

# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml!
# For all other servers: Comment out the Log4J listener in web.xml to activate Log4J.
log4j.rootLogger=INFO, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${petstore.root}/WEB-INF/petstore.log
log4j.appender.logfile.MaxFileSize=512KB
# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=3
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

  

  總結:

  IoC(控制反轉):原本是由應用程序管理的對象之間的依賴關係,如今交給了容器管理,這就叫控制反轉,即交給了IoC容器,Spring的IoC容器主要使用DI方式實現的。不須要主動查找,對象的查找、定位和建立所有由容器管理  一、大量減小了Factory和Singleton的數量,使代碼層次更加清晰,主要緣由是咱們再也不查找、定位、建立和管理對象之間的依賴關係了,都交給IoC容器管理了  二、Spring的IoC容器是一個輕量級的容器,沒有侵入性,不須要依賴容器的API,也不須要實現一些特殊接口  三、一個合理的設計最好儘可能避免侵入性

相關文章
相關標籤/搜索