一、建立一個java項目、項目結構以下圖:html
項目具體的搭建步驟以下:java
因爲咱們暫時還用不到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,也不須要實現一些特殊接口 三、一個合理的設計最好儘可能避免侵入性