框架概述

Struts:基于MVC模式的应用层框架,主要是作为控制层组件,也影响javabean,jsp

Hibernate:基于持久层的组件,简化JDBC操作

Spring:主要有六大模块功能 事物管理 与其他框架整合

MVC开发模式

基于MVC模式的项目分层

QQ截图20170506113636.png

QQ截图20170506113811.png

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>