Spring

1.介绍DI

DI就是依赖注入,有一个那么高大上的词,其实就是为一个类添加一些属性,但是这个属性的实例就靠spring在来注入

2.对象注入

这里有5个java文件一个xml文件,基本思路,客户端调用服务实现接口的addUser方法,添加一个用户,添加用户需要把数据保存在数据库,所以服务实现类里面new一个UserDao,然后调用UserDao去执行createUser的操作

  • UserDao - 用户持久化接口
  • UserDaoImpl - 用户持久化实现类
  • UserService - 服务接口
  • UserServiceImpl - 服务实现类
  • UserServiceTest - 测试文件
  • springConfig.xml - spring配置文件

UserDao

public interface UserDao {
    void createUser();
}

UserDaoImpl

public void createUser() {
        System.out.println("创建一个新的用户");
        
    }

UserService

public interface UserService {

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

UserServiceImpl

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;
    }
}

UserServiceTest

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.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-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>
原文地址:https://www.cnblogs.com/oscar1987121/p/10875137.html