Spring 入门

1. 前言

  1. 最近报名了一个软件工程的课程, 课程中需要小组组队, 开发一个项目, 我们小组呢打算做一个数字化课堂的项目, 但是需要用到Java的一些框架, 基本设想是使用 SpringMVC + Spring + MyBatis + MySQL 的架构处理。
  2. 不过很讨厌的是, 本人只学过C/C++. 对 Java 也不太了解, 更不用说这些框架了, 于是下面记录下学习的过程
  3. 我个人选用的教程是 极客学院的视频教程 http://www.jikexueyuan.com/path/javaweb/

2. 基本知识

2.1 Spring

  1. 核心: Spring IOC 和 AOP
  2. Spring 是一个轻量级反转 IOC 和 面向切片 AOP 的容器框架, 主要是为了解决企业应用开发的复杂性而诞生的 (分层, 一站式)

    • 目的: 解决企业应用开发的复杂性
    • 功能: 使用基本的 javaBean 代替 EJB
    • 范围: 任何 JAVA 应用
  3. 优点:
    i. 方便解耦, 简化开发
    ii. AOP 编程支持
    iii. 声明式事物支持
    iv. 方便程序测试
    v. 方便集成各种优秀框架
    vi. 降低了JAVAEE API 的使用难度
    vii. Spring 源码是经典的学习范例

  4. 核心模块
    这里写图片描述

2.2 Spring IOC (核心解耦)

  1. IOC (Inversion of Control, 控制反转) 是spring 的核心, 贯穿始终。 所谓 IOC, 对于spring 框架来说, 就是由 spring 来负责控制对象的生命周期和对象之间的关系。
    • 传统开发模式: 对象之间相互依赖
    • IOC 开发模式: IOC 容器安排对象之间的依赖 (减少 对象之间的耦合关系)
  2. IOC 的另外的名字叫做依赖注入(Dependency Injection), 所谓的依赖注入, 就是由IOC 容器在运行期间, 动态的将某种依赖关系注入到对象中。 所以, 依赖注入 DI 和 控制反转 IOC 是从不同角度的描述的同一件事情, 就是指通过引入 IOC 容器, 利用依赖关系注入的方式, 实现对象之间的解耦
    • 主机 读取 Upan 或者 移动硬盘 (IOC :人, 根据需求 挂接 不同的 usb 设备)
  3. IOC 好处
    • 可重用性, 可扩展性
      • 降低组件之间的耦合度, 方便单元测试
      • 提高开发效率和产品质量, 不需关心其他组件的状态
      • 统一标准, 提高模块的复用性
      • 模块有热插拔特性(配置文件中定义)
  4. 通俗理解:
    • IOC 控制反转: 创建对象的实例的控制权从代码控制剥离到 IOC 容器控制, 实际就是在 xml 文件中控制, 侧重于原理
    • DI 依赖注入: 创建对象实例时候, 为这个对象注入属性值或其他对象实例, 侧重实现

2.3 Spring AOP

  1. 面向切面编程
  2. AOP 是对 OOP 的延续
    • OOP 是静态角度考虑问题
    • AOP 是动态角度考虑问题, 面对运行中的某个过程
      • 主要功能: 日志, 异常, 事物 etc
      • 主要意图:
        • 将常用服务分离开来, 作为独立的服务组件
  3. AOP 专门用于处理系统中分布于各个模块中的交叉关注点的问题, 在 Java EE 应用中, 常常通过 AOP 来处理一些具有横切性质的系统及服务, 如事物管理, 安全检查, 缓存, 对象池管理等, AOP 已经成为一种非常常用的解决方案:

    • 存在价值: (传统处理方法)
      这里写图片描述
      降低后期维护的复杂度

    • AOP 方法

      • AOP 代理其实是由 AOP 框架动态生成的一个对象, 该对象可以作为目标对象使用, AOP 代理所包含的方法与目标对象的方法如下关系:
        这里写图片描述
      • 代理对象的方法 = 增强处理 + 被代理对象的方法
  4. AOP 的通俗理解:
    将 组件 A 和 B 分离开来, 解耦和, 让他们各自关心自己的业务逻辑。

ps: 怎么感觉 AOP 和 IOC 差不多啊, 都是实现解耦用的。。。。

3. Spring 开发环境搭建

3.1 下载相应组件

  1. 包括 jdk, jre, eclipse, spring framework
  2. 由于我们的电脑之前配置过android 的开发环境, 就只需要下载一个 spring framework 的开发包就可以了

3.2 遇到的一些问题

这里写图片描述
这里写图片描述
这些问题, 主要是由于我们本机上安装的jre 与 eclipse 不匹配所造成的
参考解决方案: http://bbs.csdn.net/topics/390837714
不过, 我们这里是直接采用 android 的eclipse 作为我们的 java web 开发的环境了

4. 构建一个简单实例

4.1 实例 UML

这里写图片描述
这个有点像 简单工厂模式, 只不过他的对应部分通过java 的反射机制在 xml 中完成了

4.2 遇到的一些问题

  1. NoClassDefFoundError: logging LogFactory
    解决方案: http://jingyan.baidu.com/article/8cdccae99cb845315413cdc4.html
    下载一个 commons.loggin.jar 即可
    相应的下载地址: http://download.csdn.net/download/badlucktang/1594563

4.3 运行结果

这里写图片描述

4.4 相关代码

需要注意的是 HelloChina, HelloWorld, Person 之间相互独立, 通过 xml 配置文件联系起来

  1. IHelloMessage.java

    package com.jike.spring.chap01;
    
    public interface IHelloMessage {
        public String sayHello();
    }
  2. HelloChina.java

    package com.jike.spring.chap01;
    
    public class HelloChina implements IHelloMessage {
    
        @Override
        public String sayHello() {
            // TODO Auto-generated method stub
            return "你好";
        }
    }
  3. HelloWorld.java

    package com.jike.spring.chap01; 
    
    public class HelloWorld implements IHelloMessage {
    
        @Override
        public String sayHello() {
            // TODO Auto-generated method stub
            return "Hello World";
        }
    }
  4. Person.java

    package com.jike.spring.chap01;
    
    public class Person {
        private IHelloMessage helloMessage;
    
        public IHelloMessage getHelloMessage() {
            return helloMessage;
        }
    
        public void setHelloMessage(IHelloMessage helloMessage) {
            this.helloMessage = helloMessage;
        }
    
        public String sayHello(){
            return this.helloMessage.sayHello();
            //return this.sayHello();
        }   
    }
  5. Main.java

    package com.jike.spring.chap01;
    
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanFactory;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.core.io.Resource;
    
    public class Main {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            // 这个函数有点简单工厂的味道, 不过他借助了java 的反射机制
            Resource r = new FileSystemResource("helloMessage.xml");
            BeanFactory f = new XmlBeanFactory(r);
            Person person = (Person)f.getBean("person");
            String s = person.sayHello();
            System.out.print("The person is currently saying" + s);
        }
    }
  6. helloMessage.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPERING/DTD BEAN/EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">
    
    <beans>
        <bean id = "helloWorld" class="com.jike.spring.chap01.HelloWorld"></bean>
        <bean id = "helloChina" class="com.jike.spring.chap01.HelloChina"></bean>
        <bean id = "person" class="com.jike.spring.chap01.Person">
            <property name="helloMessage" ref="helloChina"/>
        </bean>    
    </beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值