Spring框架的概述(1)

Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架

  • 分层:

    • SUN提供的EE的三层结构:web层、业务层、数据访问层(持久层,集成层)
    • Struts2是web层基于MVC设计模式框架.
    • Hibernate是持久的一个ORM的框架.
  • 一站式:
    • Spring框架有对三层的每层解决方案:
    • web层:Spring MVC.
    • 持久层:JDBC Template
    • 业务层:Spring的Bean管理

Spring的核心

  • IOC:(Inverse of Control 反转控制)
    控制反转:将对象的创建权,交由Spring完成.
  • AOP:Aspect Oriented Programming 是 面向对象的功能延伸.不是替换面向对象,是用来解决OO中一些问题.

IOC:控制反转.


Spring优点

  • 方便解耦,简化开发

    • Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
  • AOP编程的支持
    • Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
  • 声明式事务的支持
    • 只需要通过配置就可以完成对事务的管理,而无需手动编程
  • 方便程序的测试
    • Spring对Junit4支持,可以通过注解方便的测试Spring程序
  • 方便集成各种优秀框架
    • Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
  • 降低JavaEE API的使用难度
    • Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

IOC和DI(*****)区别?

IOC:控制反转:将对象的创建权,由Spring管理.
DI:依赖注入:在Spring创建对象的过程中,把对象依赖的属性注入到类中

  • 面向对象中对象之间的关系;

    • 依赖:
      public class A{
      private B b;
      }
    • 继承:is a
    • 聚合:
      • 聚集:
      • 组合:

Spring框架加载配置文件

ApplicationContext 应用上下文,加载Spring 框架配置文件

  • 加载classpath:
    new ClassPathXmlApplicationContext("applicationContext.xml"); :加载classpath下面配置文件.
  • 加载磁盘路径:
    new FileSystemXmlApplicationContext("applicationContext.xml"); :加载磁盘下配置文件.

BeanFactory与ApplicationContext区别?

ApplicationContext类继承了BeanFactory
BeanFactory在使用到这个类的时候,getBean()方法的时候才会加载这个类
ApplicationContext类加载配置文件的时候,创建所有的类
ApplicationContext对BeanFactory提供了扩展

  • 国际化处理
  • 事件传递
  • Bean自动装配
  • 各种不同应用层的Context实现
  • 早期开发使用BeanFactory.

MyEclipse配置XML提示

Window--->xml catalog--->add 找到schema的位置 ,将复制的路径 copy指定位置,选择schema location.

Spring的入门的程序

  • 下载Spring的开发包

https://repo.spring.io/release/org/springframework/spring/

  • spring-framework-3.2.0.RELEASE-dist.zip ---Spring开发包

    • docs :spring框架api和规范
    • libs :spring开发的jar包
    • schema :XML的约束文档.
  • spring-framework-3.0.2.RELEASE-dependencies.zip ---Spring开发中的依赖包

开始我们第一个spring的程序

  1. 创建web工程引入相应jar包:
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
开发的日志记录的包:
com.springsource.org.apache.commons.logging-1.1.1.jar       --- 用于整合其他的日志的包(类似Hibernate中slf4j)
com.springsource.org.apache.log4j-1.2.15.jar

2.创建Spring的配置文件

在src下创建一个applicationContext.xml
引入XML的约束:
找到xsd-config.html.(*****)引入beans约束:
<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">

3.在配置中配置类

<!--通过bean标签 设置类的信息,id为类取个标识 -->
    <bean id="userService" class="cn.spring.demo1.HelloServiceimpl">
        <!-- 使用<property>标签注入属性 values是普通值 ref是对象-->
        <property name="info" value="依赖注入" />
    </bean>

    完整的applicationContext.xml

    <?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:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--通过bean标签 设置类的信息,id为类起个标识 -->
    <bean id="userService" class="cn.spring.demo1.HelloServiceimpl">
        <!-- 使用<property>标签注入属性 values是普通值 ref是对象-->
        <property name="info" value="依赖注入" />
    </bean>
</beans>
  1. HelloService.java
package cn.spring.demo1;

public interface HelloService {
    public void sayHello();
}

5.HelloServiceimpl..java 实现类

package cn.spring.demo1;

/**
 * @author NOP
 *
 */
public class HelloServiceimpl implements HelloService {
    private String info;

    public void setInfo(String info) {
        this.info = info;
    }

    public void sayHello() {
        // TODO Auto-generated method stub
        System.out.print("hello spring..."+info);
    }

}
  1. 编写测试类SpringTest1.java
package cn.spring.demo1;

import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;

public class SpringTest1 {
    @Test
    // 传统方式
    public void demo1() {
        // 造成程序紧密耦合
        HelloService helloservice = new HelloServiceimpl();
        helloservice.sayHello();
    }

        //加载classpath:new ClassPathXmlApplicationContext("applicationContext.xml");
    @Test
    public void demo2() {
        //创建一个工厂类
        //加载classpath:new ClassPathXmlApplicationContext("applicationContext.xml");
        ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");// 如果不写会去web-inf下去找applicationContext.xml

        HelloService helloservice = (HelloService)applicationcontext.getBean("userService");
        helloservice.sayHello();
    }

    //加载磁盘路径:  new FileSystemXmlApplicationContext("applicationContext.xml");
    @Test
    public void demo3( ) {
        //创建一个工厂类
        //加载磁盘路径:  new FileSystemXmlApplicationContext("applicationContext.xml");
        ApplicationContext applicationcontext = new FileSystemXmlApplicationContext(
                "applicationContext.xml");// 如果不写会去web-inf下去找applicationContext.xml

        HelloService helloservice = (HelloService)applicationcontext.getBean("userService");
        helloservice.sayHello();
    }

    //BeanFactory模式
    @Test
    public void demo4(){
        //ClassPathResource
        //BeanFactory beanFactory= new XmlBeanFactory(new ClassPathResource("applicationContext.xml")); :加载classpath下面配置文件.
        BeanFactory beanFactory= new XmlBeanFactory(new FileSystemResource("applicationContext.xml"));//加载磁盘下的配置文件
        HelloService helloservice = (HelloService)beanFactory.getBean("userService");
        helloservice.sayHello();
    }
}

原文地址:http://blog.51cto.com/4534309/2107550

时间: 2024-10-09 21:04:24

Spring框架的概述(1)的相关文章

Spring 框架的概述以及Spring中基于XML的IOC配置

Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器.框架.一站式 优势: 方便解耦:做到编译期不依赖,运行期才依赖 AOP的支持 声明式事务的支持 方便程序的测试 方便整合各种框架 降低JavaEE API的使用难度 Spring源码很厉害 解耦: 耦合包括:类之间的和方法之间的 解决的思路: 在创建对象的时候用反射来创建,而不是new 读取配置文件

spring框架

思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护公共变量] 创建时间 action    访问时候创建 service   启动时候创建 dao       启动时候创建 3. 对象的依赖关系 action 依赖 service service依赖 dao =============================================

Java开发工程师(Web方向) - 04.Spring框架 - 第3章.AOP技术

Spring框架 - AOP概述 笔记https://my.oschina.net/hava/blog/758873Spring框架 - AOP使用 笔记https://my.oschina.net/hava/blog/758881 AOP技术单元测试 返回 本次得分为:7.00/7.00, 本次测试的提交时间为:2017-09-11, 如果你认为本次测试成绩不理想,你可以选择再做一次. 1 单选(2分) 如下关于AOP的描述中错误的是: 得分/总分 A. AOP可以对代码进行解耦: B. A

12、Spring框架核心

?* Struts与Hibernate可以做什么事? Struts, Mvc中控制层解决方案 可以进行请求数据自动封装.类型转换.文件上传.效验- Hibernate, 持久层的解决方案: 可以做到, 把对象保存到数据库, 从数据库中取出的是对象. ?* 传统的开发模式 基于mvc模式进行项目开发: 基于mvc的项目框架结构: Entity / dao / service / action // 1. 实体类 class User{ } //2. dao class UserDao{ .. 访问

Spring框架第一天

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption

Spring框架(一)

1.1 专业术语了解 组件/框架设计 侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如: Struts框架 非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hibernate框架 / Spring框架 控制反转: Inversion on Control , 控制反转 IOC 对象的创建交给外部容器完成,这个就做控制反转. 依赖注入, dependency injection 处理对象的依赖关系 区别: 控制反转, 解决对象创建的问题 [对象创建交给别

Spring框架教程IDEA版-----更新中

一.spring框架的概述以及spring中基于XML的 TOC配置 1.spring的概述 (1)spring是什么和spring的两大核心? 全栈轻量级的开源框架,以IOC(反转控制)和AOP(面向切面编程)为内核,提供了展现层Spring MVC和持久层JDBC以及业务层事务管理等众多的企业级应用技术,还能整合世界众多的著名的第三方框架和类库. (2) spring的优势 方便解耦,简化开发,AOP编程的支持,声明式事务的支持,方便程序的测试,方便集成各种优秀的框架,降级的JAvaEE A

Spring.NET依赖注入框架学习--概述

Spring.NET依赖注入框架学习--Spring.NET简介 概述 Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入.面向方面编程(AOP).数据访问抽象及ASP.NET扩展等等.Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上. 企业级应用一般由多个物理层组成,每个物理层也经常划分为若干功能层.不同层次之间需要相互协作,例如,业务服务层一般需

Spring框架学习-Spring和IOC概述

一:什么是Spring框架? spring是一个分层的javase/EEfull-stack(一站式)轻量级的java开源框架.是为了解决企业开发的复杂性而创建的.框架的主要优势是分层架构,Spring的核心是控制反转(IOC)和面向切面(AOP). 二.学习Spring的好处? 主要就是方便解耦,简化开发 Spring就像一个工厂,可以将所有对象创建和依赖关系维护,都交给Spring管理. AOP编程的支持 Spring提供面向切面编程,可以方便的实现对程序进行权限拦截.运行监控等功能. 声明