简介
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。
Spring优点
方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序
方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
降低JavaEE API的使用难度
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
基本概念
Dependency 依赖:一个类的实现需要用到另一个类。
Injection 注入:将一个类添加到另一个类中。
DI (Dependency Injection) 依赖注入:A类依赖B类,A类提供set接口,当需要B类时,通过接口,将B类传递给A类。
IOC (Inversion of Control) 控制反转:由以前的A类创建B类,转变为由第三方IOC容器(Spring)创建B类。A类不能直接创建B类,A类通过第三方IOC容器获取B类。
传统方式
传统方式创建 Model、Dao、DaoImpl、Service
User Model
1
2
3
4
5public class User {
private String username;
private String password;
//省略get、set方法
}User Dao
1
2
3public interface UserDAO {
public void save(User user);
}User DaoImpl
1
2
3
4
5
6public class UserDAOImpl implements UserDAO {
public void save(User user) {
System.out.println("user saved!");
}
}User Service
1
2
3
4
5
6
7
8
9
10
11
12public class UserService {
private UserDAO userDAO;
public void add(User user) {
userDAO.save(user);
}
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}
1 | //创建Service层,Service层调用DaoImpl的add()方法,add()调用Dao层的save()方法。 |
IOC方式
beans.xml配置一个bean
<beans>
<bean id="u" class="com.dao.impl.UserDAOImpl" /> //配置一个简单类
<bean id="userService" class="com.service.UserService" > //配置一个userService
<property name="userDAO" bean="u"/> //为userService通过property配置一个setUserDao()方法,当调用setUserDao()方法时,将u这个bean传进去(注入)。
</bean>
</beans>
``` bash
//IOC方式与传统方式得到的结果都一样,在控制台输出user saved!因为都执行了save(User)方法。
public class UserServiceTest {
@Test
public void testAdd() throws Exception {
//1 加载配置文件,默认为beans.xml
BeanFactory applicationContext = new ClassPathXmlApplicationContext();
UserService service = (UserService)applicationContext.getBean("userService");
User u = new User();
u.setUsername("zhangsan");
u.setPassword("zhangsan");
service.add(u);
}
}
##