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.javapackage 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>