2.5 Bean的装配方式
Spring容器负责创建应用程序中的bean同时通过ID来协调这些对象之间的关系。作为开发人员,我们需要告诉Spring要创建哪些bean并且如何将其装配到一起。
Bean的装配可以理解为依赖关系注入Bean的装配方式即Bean依赖注入的方式。.Spring容器支持多种形式的Bean的装配方式,如基于XML的装配、基于注解(Annotation)的装配和自动装配(其中最常用的是基于注解的装配),接下来将对前两种进行详细讲解。
基于XML的装配:
程序结构如下图:
程序代码如下:
其中UserDao是一个接口如下所示:
package dao; public interface UserDao { public void say(); } |
UserDaoImpl是接口UserDao的实现类代码如下所示:
package impl; import dao.UserDao; public class UserDaoImpl implements UserDao { public void say() { System.out.println("helloworld Spring!"); } } |
UserService是一个接口,其代码如下所示:
package dao;
public interface UserService { public void show(); } |
UserServiceImpl是接口UserService的实现类,该类有一个UserDao类型的成员变量userDao。如下代码所示:
package impl; import java.util.List; import dao.UserDao; import dao.UserService;
public class UserServiceImpl implements UserService { UserDao userDao; String username; List<String> list;
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
public List<String> getList() { return list; }
public void setList(List<String> list) { this.list = list; }
public UserDao getUserDao() { return userDao; }
public void setUserDao(UserDao userDao) { this.userDao = userDao; }
public void show() { userDao.say(); System.out.println("userservice helloworld!"); System.out.println(username); System.out.println(list.get(0)); System.out.println(list.get(1)); }
} |
我们将装配UserServiceImpl对象的操作放在配置文件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-4.3.xsd"> <!-- 将指定类配置给Spring,让Spring创建其对象的实例 --> <bean id="userDao" class="impl.UserDaoImpl"></bean> <bean id="userService" class="impl.UserServiceImpl"> <property name="userDao" ref="userDao"></property> <property name="username" value="张三"></property> <property name="list"> <list> <value>"看书"</value> <value>"跑步"</value> </list> </property> </bean> </beans> |
applicationContext.xml文件定义了一个bean对象,该bean对应的类是impl包中的UserDaoImpl。定义了另一个bean对象userService该bean对应的类是impl包中的userServiceImpl。注意userServiceImpl的<property>标记定义了bean对象userService的一个子成员,该子成员的属性的name的值“userDao”对应类userServiceImpl中的成员变量userDao,而该子成员的属性的ref的值“userDao”对应id为“userDao”的bean,表明用该bean作为配件去装配bean对象userService。
由此我们编写测试类Test.java代码如下:
import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;
import dao.UserDao; import dao.UserService; import impl.UserDaoImpl; import impl.UserServiceImpl;
public class Test {
public static void main(String[] args) { //读取配置文件生成spring容器 ApplicationContext appc=new ClassPathXmlApplicationContext("applicationContext.xml"); UserService ud=(UserService)appc.getBean("userService"); ud.show(); } } |
运行程序结果如下:
helloworld spring! userservice helloworld! 张三 "看书" "跑步" |

