Spring - DI

1.介紹DIjava

DI就是依賴注入,有一個那麼高大上的詞,其實就是爲一個類添加一些屬性,可是這個屬性的實例就靠spring在來注入spring

 

2.對象注入數據庫

這裏有5個java文件一個xml文件,基本思路,客戶端調用服務實現接口的addUser方法,添加一個用戶,添加用戶須要把數據保存在數據庫,因此服務實現類裏面new一個UserDao,而後調用UserDao去執行createUser的操做數組

  • UserDao - 用戶持久化接口
  • UserDaoImpl - 用戶持久化實現類
  • UserService - 服務接口
  • UserServiceImpl - 服務實現類
  • UserServiceTest - 測試文件
  • springConfig.xml - spring配置文件

UserDaoide

public interface UserDao {
    void createUser();
}

 

UserDaoImpl測試

public void createUser() {
        System.out.println("建立一個新的用戶");
        
    }

 

UserServicethis

public interface UserService {

    /**
     * 添加用戶
     */
    void addUser();
}

 

UserServiceImplspa

public class UserServiceImpl implements UserService{

    private UserDao userDao;
    
    /**
     * 實現接口方法
     */
    public void addUser() {
        userDao.createUser();
    }
    
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public UserDao getUserDao() {
        return userDao;
    }
}

 

UserServiceTestcode

public class UserServiceTest {

    @Test
    public void test() {
        //之前
//        UserService userService = new UserServiceImpl();
//        userService.addUser();
        
        /**
         * spring的寫法,這是一個工廠類,這裏有一個參數,參數對應配置文件的classpath位置,src爲根目錄
         */
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/com/test/spring/di/springConfig.xml");
        
        //這裏的參數爲 配置文件中 bean id,意思就是獲取 對應id實例對象
        UserService us_1 = (UserService)context.getBean("userServiceBean");
        us_1.addUser();
        
    }

 

springConfig.xmlxml

<?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-4.3.xsd">
         
         <!-- 建立bean -->
        <bean id="userServiceBean" class="com.test.spring.di.UserServiceImpl">
            <!-- 注入參數,name是對應實現類中的 參數名,ref是對應bean的ID -->
            <property name="userDao" ref="userDaoBean"></property>
        </bean>
        <!-- 建立bean -->
        <bean id="userDaoBean" class="com.test.spring.di.UserDaoImpl"></bean>
</beans>

 

3. 基本類型注入

上面看了給予對象賦值,這裏看看字符串賦值,兩個類,1個配置

  • Person - 對象
  • TestSetter - 測試類
  • springConfig.xml - 配置

person

public class Person {

    private String name;
    private String age;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "名字 = " + getName() + " ,年齡 = " + getAge();
    }
    
}

 

配置

<?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-4.3.xsd">
         
        <!-- 實例化對象 -->
        <bean id="person" class="com.test.spring.setter.Person">
            <!-- 第一種 寫法 注入賦值 -->
            <property name="name" value="Jack"></property>
            <!-- 第二種 寫法 注入賦值 -->
            <property name="age">
                <value>13</value>
            </property>
        </bean>
</beans>

 

TestSetter

public class TestSetter {

    @Test
    public void test() {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/com/test/spring/setter/springConfig.xml");
        Person person = context.getBean("person",Person.class);
        System.out.println(person.toString());
    }
}

 

4.集合注入

集合注入就是在property下添加子標籤,不一樣類型有本身特有的子標籤名稱

  • 數組 - array
<!-- 數組 -->
            <property name="arrayData">
                <array>
                    <value>t1</value>
                    <value>t2</value>
                </array>
            </property>

 

  • List - list
<!-- list -->
            <property name="listData">
                <list>
                    <value>t1</value>
                    <value>t2</value>
                </list>
            </property>

 

  • Set - set

 

<!-- set -->
            <property name="setData">
                <set>
                    <value>t1</value>
                    <value>t2</value>
                </set>
            </property>

 

 

  • Map - map
<!-- map -->
            <property name="mapData">
                <map>
                    <!-- 第一種方式 -->
                    <entry key="k1" value="值1"></entry>
                    <!-- 第二種方式 -->
                    <entry>
                        <key>
                            <value>k2</value>
                        </key>
                        <value>值2</value>
                    </entry>
                </map>
            </property>

 

  • Properties - props
<!-- properties -->
            <property name="propertiesData">
                <props>
                    <prop key="k1">值1</prop>
                    <prop key="k2">值2</prop>
                </props>
            </property>
相關文章
相關標籤/搜索