1、ioc操作分爲兩個部分
(1)ioc的配置文件方式
(2)Ioc的註解方式
2、ioc的底層原理
(1)xml配置文件
(2)Dom4j解決xml
(3)工廠設計模式
(4)反射
3、實現原理
原來的方式耦合度太高了
比如說
Publi class User{
Public void add(){
...
}}
那麼如果想要調用方法就需要
User user=new User();
User.add();
後來就採取使用工廠模式解耦合操作
Public class UserService{
Public void add(){}}
Public class UserServlet{
//調用
UserService s=Factory.getService();
s.add();
}
如果想要在UserServlet中調用UserService中的add方法就需要創建工廠類
//建一個工廠類
Public class Factory{
//提供一個返回UserService對象的方法
Public static UserService getService(){
Return new UserService();}}
//靜態方法返回service對象
但是這個方法還是不太好
因爲servlet和工廠還有耦合度
我們想要的是高內聚低耦合:就是一個類中緊密相連,不同的類中關聯度低是
在ioc中是這麼做的(ioc中怎麼實現)
把我們的對象創建不是new出來的是配置文件配出來的
首先由兩個類
Public class Service{}
Public class Servlet{}
在servlet要得到service的對象
第一步創建一個配置文件(xml)在配置文件中配置對象類
<bean id=”Servlce” class=”要創建對象的類的全路徑”/>
第二步創建一個工廠類使用dom4j解析文件+反射
Public class Factory{
//提供返回對象的方法
Public static Service getService(){
//1使用dom4j解析(對文件內容進行操作)xml文件
//根據配置文件的id值得到id值對應的class屬性得值
String classValue=”class屬性值”;
//2使用反射創建類的對象
Class clazz=Class.forName(classValue);
//創建類的對象
Service service=Class.newInstance();
Return service;
}}
4、ioc實例
1、導入jar包
Jar包的特點是每個功能三個jar包
(1)源代碼(2)文檔(3)基本
做string最基本功能時只需要core container中的:
Beans Core Context SpEL
還需要導入支持日誌輸出的jar包
Commons-logging-1.2.jar還有一個叫log4j-1.0.16.jar
2、創建一個類在類裏面創建方法
3、創建一個spring的配置文件配置創建的類
(1)Spring的核心配置文件名稱和位置不是固定的
一般放在src下面,建議applicationContext.xml
(2) 引入schema約束
找到docs目錄下的spring-framework-reference下的html
<?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/spring-beans.xsd ">
</beans>
(3) 配置對象的創建
<!-- ioc入門 -->
<bean id="user" class="cn.itcast.ioc.User"></bean>
所以配置文件裏面是
<?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/spring-beans.xsd "
>
<!-- ioc入門 -->
<bean id="user" class="cn.itcast.ioc.User"></bean>
</beans>
4、測試對象創建
package cn.itcast.ioc;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIOC {
@Test
public void testUser() {
//1加載spring配置文件,根據創建對象
ApplicationContext context=
new ClassPathXmlApplicationContext("applicationControl.xml");
//因爲文件在src下所以直接可以寫文件名
//根據配置文件的配置把對象創建
//2得到配置創建的對象
//context.Bean("id值");
User user=(User) context.getBean("user");//得到就是對象
System.out.println(user);//如果user對象能創建得到的是地址
user.add();
}
}