1.JavaWeb项目的三层结构
JavaWeb三层结构包括:web层(也叫表示层)、service层(也叫业务逻辑层)、dao层(也叫数据访问层)
web层使用的框架有struts、spring mvc,service层使用spring框架,dao层使用hibernate或者mybatis框架。我们所说的SSM框架也就是Spring+Spring MVC+MyBatis的缩写。
浏览器访问服务器上的Web层,三层结构表示图如下所示,其中Spring贯穿三层,起到承前启后的作用。而浏览器通常使用JavaScript和jQuery框架。
Spring的学习过程主要分三个阶段:
阶段一:基础学习(IoC控制翻转,DI依赖注入),Spring整合Junit,Spring整合web
阶段二:AOP面向切面编程、JdbcTemplate
阶段三:事务管理、SSH整合
2.Spring基础学习
2.1 Spring基础知识
说明:Eclipse和MyEclipse为开发Java的工具,Eclipse允许安装第三方插件来扩展自己的功能,而MyEclipse可以理解为一个插件集,是在Eclipse上的一个扩展,专用于J2EE的开发。Eclipse包括了MyEclipse,功能更强大,我们可以由MyEclipse开发转为直接用Eclipse开发。
什么是Spring?
Spring是一个开源的轻量级Java开发框架,它是为了解决企业开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只能由EJB完成的事情。Spring的主要优势就是其分层结构,它是一个分层的Java SE/EE full-stack(一站式)开源框架。
轻量级是相对于EJB(Enterprise JavaBean:企业级JavaBean)而言的,其依赖资源少,消耗资源少。
Spring框架由七个定义明确的模块组成:核心容器(Spring Core)、应用上下文模块(Spring Context)、Spring的AOP模块(Spring AOP)、JDBC抽象和DAO模块(Spring DAO)、对象/关系映射集成模块(Spring ORM)、Spring的Web模块(Spring Web)、Spring的MVC模块(Spring Web MVC)
Spring的体系结构
Spring的核心
- Spring的核心是控制反转(IoC)和面向切面(AOP)
Spring的优点
- 方便解耦,简化开发 (高内聚低耦合)
- Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
- spring工厂是用于生成bean
- AOP编程的支持
- Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
- 声明式事务的支持
- 只需要通过配置就可以完成对事务的管理,而无需手动编程
- 方便程序的测试
- Spring对Junit4支持,可以通过注解方便的测试Spring程序
- 方便集成各种优秀框架
- Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
- 降低JavaEE API的使用难度
- Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
2.2 IoC(掌握)
1.MyEclipse(或者Eclipse)创建web project
2.导入jar包(4+1, 4个核心:beans、core、context、expression,1个依赖:common-loggings)
这里用的是spring-framework-3.2.0.RELEASE-dist.zip的jar包和spring-framework-3.0.2.RELEASE-dependencies.zip
导jar包的时候别导错了(xxx-sources.jar表示的是源码,xxx.RELEASE.jar表示的是字节码)
3.添加目标类(抽象类和实现类)
package com.syc.a_ioc;
public interface UserService {
public void addUser();
}
package com.syc.a_ioc;
public class UserServiceImpl implements UserService {
@Override
public void addUser() {
// TODO Auto-generated method stub
System.out.println("a_ioc add user");
}
}
4.添加配置文件
位置:任意,一般放在classpath下
名称:任意,约定取applicationContext.xml
内容:添加schema约束
约束文件位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html
<?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.xsd">
<!--配置Service
<bean>配置需要创建的对象
id:用于从Spring容器中获取实例
class:全限定类名
-->
<bean id="userServiceId" class="com.syc.a_ioc.UserServiceImpl"></bean>
</beans>
5.测试
package com.syc.a_ioc;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIoC {
@Test
public void demo01(){
//之前new方法
UserService userService = new UserServiceImpl();
userService.addUser();
}
@Test
public void demo02(){
//从Spring容器获得
//1.获得容器
String xmlPath = "com/syc/a_ioc/beans.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
//2.获得内容,不需要自己new,直接从容器中获得
UserService userService = (UserService) applicationContext.getBean("userServiceId");
userService.addUser();
}
}
效果:两种方法都能将"a_ioc add user"打印输出