Spring 概述,HelloWorld案例 (一)
框架概述
Struts:基于MVC模式的应用层框架,主要是作为控制层组件,也影响javabean,jsp
Hibernate:基于持久层的组件,简化JDBC操作
Spring:主要有六大模块功能 事物管理 与其他框架整合
MVC开发模式
基于MVC模式的项目分层
Spring框架
Spring开源框架,提供一站式解决方案
框架理解
框架,会预先实现一些功能,给开发人员提供便利,提高开发效率,提升程序扩展性,健壮性
名词解释
-
高内聚低耦合
类内部的关系越紧密越好,类于类的关系越少越好
-
侵入式设计
引入的组件对现有的类的结构会有影响,这就是"侵入式设计"的组件
Structs:侵入式设计
Hibernate:非侵入式设计
Spring:非侵入式设计
Spring 六大模块
-
Spring Core:核心功能
主要提供了IOC容器,创建对象/依赖关系
-
Spring AOP
面向切面编程
-
Spring Web
对web开发的支持,可以与Struts无缝整合
-
Spring JDBC
对JDBC操作的支持,JDBCTemplate模板工具类
-
Spring ORM 对象关系映射
可以对Hibernate提供支持
-
Spring JEE
对JAVA EE开发其他模块的支持(EJB)
EJB已经很少用了,其他模块都依赖核心模块
IOC容器(Inversion Of Control控制反转)
控制反转容器解决对象创建问题
控制:需要一个对象,自己new一个,这是自己控制对象的创建,现在需要对象,不自己创建,交给外部的容器创建,叫控制反转.通过配置告诉容器创建什么对象.IOC容器 = bean.xml + ApplicationContext 容器类
DI(Dependency Injection依赖注入)
创建对象后,处理对象的依赖关系
User user = new User();
jar包说明
beans:bean节点管理
context:spring上下文
core:IOC容器
expression:spring表达式
Demo
user.setAddress(...); //需要DI(依赖注入)
package com.matrix42.dao;
public class UserDao {
public void save() {
System.out.println("UserDao.save()");
}
}
package com.matrix42.service;
import com.matrix42.dao.UserDao;
public class UserService {
//创建dao对象
private UserDao userDao;// = new UserDao();
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
userDao.save();
}
}
package com.matrix42.action;
import com.matrix42.service.UserService;
/*
* 多例Action实例:在访问的时候创建对象!
*/
public class UserAction {
//创建Service
private UserService userService;// = new UserService();
public void setUserService(UserService userService) {
this.userService = userService;
}
public String execute(){
userService.save();
return "sucess";
}
}
package com.matrix42.action;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
/**
* Created by Matrix42 on 2017/5/6.
*/
public class UserActionTest {
@Test
public void testApp() {
UserAction userAction = new UserAction();
userAction.execute();
}
/*
从ICO容器获取对象
*/
@Test
public void testApp2() {
// System.out.println(Thread.currentThread().getContextClassLoader().getResource("applicationContext.xml").getPath());
//容器对象(加载applicationContext.xml配置文件)
//ApplicationContext ac = new ClassPathXmlApplicationContext("classpath*:applicationContext.xml");
ApplicationContext ac = new FileSystemXmlApplicationContext("src/applicationContext.xml");
//获取对象(id)
UserAction userAction = (UserAction) ac.getBean("userAction");
userAction.execute();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 创建Dao实例-->
<bean id="userDao" class="com.matrix42.dao.UserDao"></bean>
<bean id="userService" class="com.matrix42.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
<bean id="userAction" class="com.matrix42.action.UserAction">
<property name="userService" ref="userService"></property>
</bean>
</beans>