8, Spring 介绍 。 读 Spring API
问 :spring3.1 这个 spring.jar 怎么不在 dist 文件夹里,是不是还要额外下载jar包?
答 :spring3.0以上已经没有提供完整的spring包了,按功能模块被分解成了,实际开发时,选择你需要的包即可,core,beans,context,
在使用web开发中一般都需要被加入,如果你实际应用使用了aop等,这些包也要被加入。
9, // dependency injection - 依赖注入 示例程序中, UserService, DAO 都依赖于 容器的 注入
/* inversion of control 什么是控制反转?
(1), Service 成员 userDAO 控制在容器手里了,不用自己new实现。反转到容器那里去了!
(2), 原来编程控制的是实现,现在是接口,是抽象, 反转到抽象
(3), 你控制的是接口,而不是整个实现了!原来控制在自己手里,现在控制在别人的容器手里了。 “控制反转”
*/
@(1), 指定 XML, catalog 书写规范与提示 Spring_09 自动提示 马士兵.avi
注入类型
Spring_0300_IOC_Injection_Type
setter(重要)
构造方法(可以忘记)
接口注入(可以忘记)
@(2), 以上讲解的都是 setter 注入
UserService.java
package com.bjsxt.service; import com.bjsxt.dao.UserDAO; // 抽象出的数据库管理层 import com.bjsxt.dao.impl.UserDAOImpl; import com.bjsxt.model.User; public class UserService { // 业务逻辑, 还可以设计权限, 抽象出一层 : 用户服务层, 用户管理层 private UserDAO userDAO; public UserDAO getUserDAO() { return userDAO; } public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } public void add(User u) { this.userDAO.save(u); // 添加用户会将用户添加到 DB 中。 } /* * public UserService(UserDAO userDAO) { super(); this.userDAO = userDAO; } */ }UserServiceTest.java
package com.bjsxt.service; import static org.junit.Assert.*; import org.junit.Test; import org.springframework.beans.factory.BeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.bjsxt.dao.UserDAO; import com.bjsxt.model.User; // dependency injection - 依赖注入 示例程序中, UserService, DAO 都依赖于 容器的 注入 // inversion of control 什么是控制反转? Service 成员 userDAO 控制在容器手里了,不用自己new实现。反转到容器那里去了!原来编程控制的是实现,现在是接口是抽象,反转到抽象 // 你控制的是接口,而不是整个实现了!原来控制在自己手里,现在控制在别人的容器手里了。 “控制反转”。 public class UserServiceTest { @Test public void testAdd() throws Exception { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserService service = (UserService) ctx.getBean("userService"); // new // UserService(); User u = new User(); u.setUsername("zhangsan"); u.setPassword("zhangsan"); service.add(u); } }
<?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-3.1.xsd"> <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl"> <!-- collaborators and configuration for this bean go here --> </bean> <bean id="userService" class="com.bjsxt.service.UserService"> <property name="userDAO" ref="u"/> </bean> <!-- more bean definitions go here --> </beans>
构造方法注入
UserService.javapackage com.bjsxt.service; import com.bjsxt.dao.UserDAO; // 抽象出的数据库管理层 import com.bjsxt.dao.impl.UserDAOImpl; import com.bjsxt.model.User; public class UserService { // 业务逻辑, 还可以设计权限, 抽象出一层 : 用户服务层, 用户管理层 private UserDAO userDAO; public UserDAO getUserDAO() { return userDAO; } public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } public void add(User u) { this.userDAO.save(u); // 添加用户会将用户添加到 DB 中。 } public UserService(UserDAO userDAO) { super(); this.userDAO = userDAO; } }beans.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-3.1.xsd"> <bean id="u" class="com.bjsxt.dao.impl.UserDAOImpl"> <!-- collaborators and configuration for this bean go here --> </bean> <bean id="userService" class="com.bjsxt.service.UserService"> <!-- <property name="userDAO" ref="u"/> --> <constructor-arg> <ref bean="u"/> </constructor-arg> </bean> <!-- more bean definitions go here --> </beans>