轻松理解spring IOC
spring IOC(Inversion of control)即控制反轉
概念:一,spring框架的核心之一
二,控制權由對象本身轉向容器;由容器根據配置文件去創建實例并創建各個實例之間的依賴關系?
接下來我們以一個數據庫連接的案列來闡述IOC的工作原理,下圖為該項目的結構體系
本例中我們著重關注util(獲取數據庫連接對象)以及dao(數據庫訪問層)的依賴關系解析
本例需求:dao層可以自由,簡潔操作mysql和sqlserver數據庫
第一步:我們先定義了獲取連接對象的接口
1 package util; 2 3 import java.sql.Connection; 4 5 public interface MyConnection { 6 public Connection getConnection(); 7 }第二步:mysql和sqlserver對上一接口的具體實現(以sqlserver為例)
1 package util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 6 public class MyConnection_sqlserver implements MyConnection { 7 9 // 第一步:獲取數據連接,讓appliction server能夠與db server進行交互 10 private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver"; 11 private String url = "jdbc:sqlserver://localhost:1433;DatabaseName=CardDB"; 12 private String name = "sa"; 13 private String pwd = "123456"; 14 private Connection conn = null; 15 16 @Override 17 public Connection getConnection() { 18 try { 19 Class.forName(driver); 20 } catch (ClassNotFoundException e) { 21 System.out.println( e.getMessage() ); 22 } 23 try{ 24 conn = DriverManager.getConnection(url, name, pwd); 25 } 26 catch(Exception e){ 27 System.out.println("獲取數據庫連接時有異常:"+e.getMessage()); 28 } 29 return conn; 30 } 31 32 }第三步:dao獲取連接對象
1 package dao; 2 3 import java.sql.Connection; 4 import java.sql.PreparedStatement; 5 import java.sql.ResultSet; 6 import java.util.ArrayList; 7 import java.util.List; 8 9 import entity.BookCard; 10 import util.MyConnection; 11 12 public class BookCardDaoImpl implements BookCardDao { 13 14 private MyConnection c; 15 16 public void setC(MyConnection c) { 17 this.c = c; 18 }解析:一,在dao中我們只定義了一個連接對象的屬性,我們并不用知道具體是哪一個數據庫的連接,只需要利用這個對象進行數據庫操作即可
二,需要在本類中提供一個公共的set方法以便spring將這個連接對象注入進來
我們可以對照面向對象編程的寫法來進一步了解IOC的長處
1 public class BookCardDaoImpl implements BookCardDao { 2 3 MyConnection c = new MyConnection_sqlserver();解析:在傳統面向對象的編程中我們層層級之間的關系緊密耦合在一起這就可能會引起這樣一個問題,如果某一層出現問題,則可能影響到其他層,所以迫使其它層也需要作出調整
關鍵--》spring注入
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:context="http://www.springframework.org/schema/context" 7 xmlns:jee="http://www.springframework.org/schema/jee" 8 xmlns:tx="http://www.springframework.org/schema/tx" 9 xsi:schemaLocation=" 10 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 11 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd 12 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd 13 http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd 14 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> 15 20 <bean id="myDao1" class="dao.BookCardDaoImpl" scope="prototype"> 21 <property name="c" ref="myConnection1"></property> 22 </bean> 23 28 <bean id="myConnection1" class="util.MyConnection_mysql" scope="prototype"></bean> 29 30 <bean id="myConnection2" class="util.MyConnection_sqlserver" scope="prototype"></bean> 31 32 </beans> 33解析:一,以上為部分spring的配置文件
二,回到本例的需求上來分析,如果我們需要操作mysql數據庫只需要在dao這個bean中引用bean_id為myConnection1的bean,同理SqlServer則引用myConnection2
本篇博客到此結束,如果想繼續深入理解IOC的朋友歡迎大家閱讀下篇自己動手寫spring IOC框架
轉載于:https://www.cnblogs.com/1016882435AIDA/p/5895480.html
總結
以上是生活随笔為你收集整理的轻松理解spring IOC的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银行卡账号是什么?
- 下一篇: 可以帮别人办银行卡吗 能帮别人办银行卡吗