Spring-DI-XML配置方式

前情提要

IOC-XML配置

DI

  • 依賴注入,是控制反轉的實現方式;
  • 依賴:兩個或多個對象之間的關係
public class A {
	public B b;
}
  • 以上可以看出,A類依賴(需要)B類,當A類實例化對象和運行時,如果需要B類的實例對象,IoC容器會主動創建一個B對象注入到A對象所需要的地方,A對象獲得依賴B對象的過程,由主動行爲變成了被動行爲,即把創建對象交給了IoC容器處理,控制權顛倒過來了,這就是控制反轉的由來!

實現方式

public class B {
}

new方式

public class A {
	public B b = new B();
}

setter方式

public class A {
	public B b;
	public void setB (B b) {
        this.b= b;
    }
}

項目目錄

DI目錄

項目代碼

配置文件xml

常用名稱: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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置bean -->
    <bean id="UserService" class="com.zhangzibu.spring.ioc.service.impl.UserServiceDi">
        <property name="userDao" ref="UserDao" ></property>
    </bean>

    <bean id="UserDao" class="com.zhangzibu.spring.ioc.dao.impl.UserDaoImpl"></bean>

</beans>
  • <bean id=“UserService” …>:配置bean
  • <bean id=“UserDao” …>:配置bean
  • <property>:用於進行屬性注入,相當於setter方法
    • name:bean的屬性名,即UserServiceDi實現類裏的userDao對象
    • ref:另一個bean的id值的引用,即xml中的<bean id=“UserDao” …>

Java代碼

dao層

接口

package com.zhangzibu.spring.ioc.dao;

public interface UserDao {

    void save(String para);

}

實現類

package com.zhangzibu.spring.ioc.dao.impl;

import com.zhangzibu.spring.ioc.dao.UserDao;

public class UserDaoImpl implements UserDao {

    @Override
    public void save(String para) {
        System.out.println("Save " + para);
    }
}

service層

接口

package com.zhangzibu.spring.ioc.service;

public interface UserService {

    void save(String para);

}

實現類

New方式
package com.zhangzibu.spring.ioc.service.impl;

import com.zhangzibu.spring.ioc.dao.UserDao;
import com.zhangzibu.spring.ioc.dao.impl.UserDaoImpl;
import com.zhangzibu.spring.ioc.service.UserService;

public class UserServiceNew implements UserService {

    private UserDao userDao = new UserDaoImpl();

    @Override
    public void save(String para) {
        this.userDao.save(para);
    }
}
DI方式
package com.zhangzibu.spring.ioc.service.impl;

import com.zhangzibu.spring.ioc.dao.UserDao;
import com.zhangzibu.spring.ioc.dao.impl.UserDaoImpl;
import com.zhangzibu.spring.ioc.service.UserService;

public class UserServiceDi implements UserService {

    private UserDao userDao;

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    @Override
    public void save(String para) {
        this.userDao.save(para);
    }
}

測試類

package com.zhangzibu.spring;

import com.zhangzibu.spring.ioc.service.UserService;
import com.zhangzibu.spring.ioc.service.impl.UserServiceDi;
import com.zhangzibu.spring.ioc.service.impl.UserServiceNew;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {
    /**
     * DI-XML配置
     */
    @Test
    public void testDi(){
		// 1,new方式
        UserService userServiceNew = new UserServiceNew();
        userServiceNew.save("New 張子布");
		
		// 2,DI方式
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/applicationContext.xml");
        UserService userServiceDi = (UserService) applicationContext.getBean("UserService");
        userServiceDi.save("DI 張子布");
    }
}

結果

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