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>