Spring

Hello Spring !

简介

Spring是分层的JavaSE/JavaEE应用一站式的轻量级开源框架,以IoC/DI和AOP为内核,提供了展现层SpringMVC和持久层SpringJDBC以及业务层事务管理等众多的企业级应用技术,并整合了大量的第三方框架和类库,用于总体的管理,主要简化对象的创建和依赖关系的管理,并依靠AOP可以抽离公共的业务逻辑处理
1、添加依赖;
添加依赖

2、配置需要的配置—beans.xml

配置

3、编码
```java
public class Spring {
    public static void main(String[] args) {
        Resource resource=new ClassPathResource("beans.xml");
        //Resource接口有2种具体实现
        // 1、ClassPathResource在classpath路径下查找核心配置文件
        //2、FileSystemResource在指定的路径下查找核心配置文件

        //获取IoC容器的引用
        BeanFactory facory=new XmlBeanFactory(resource);

        //需要使用对象时根据受管bean的名称获取受管bean对象,由容器负责创建对象,并管理对象的生命周期
        Object now=facory.getBean("now");
        System.out.println(now);
    }
}

设计模式六大原则

六大原则分别是:单一职责原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特法则、开闭原则,下文对其逐步进行分解。

单一职责原则

一个类只负责一个功能领域中的相应职责:
单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离.

里氏代换原则

所有引用基类的地方必须能透明地使用其子类的对象。在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。

依赖倒转原则

抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。

依赖注入是指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常用的注入方式有三种,分别是:构造注入,设值注入(Setter注入)和接口注入。

接口隔离原则

使用多个专门的接口,而不使用单一的总接口

迪米特法则

一个软件实体应当尽可能少地与其他实体发生相互作用。迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系。

开闭原则

一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。

设计选用

日常开发工作中,制定这六个原则的目的并不是要刻板的遵守,而需要根据实际情况灵活运用,对这六个原则的遵守并不是否的问题,而是多和少的问题,也就是说一般不会说有没有遵守,而是说遵守程度的多少,遵守程度只要在一个合理的范围内,就算是良好的设计。

Spring的优点

  • 简化企业级开发
    • 封装了大部分的企业级服务,提供了更好的访问这些服务的方式
    • 提供了IoC,AOP功能的容器,方便编程
  • 遵循Spring框架的应用程序,一定是设计良好的,针对接口编程,这样就简化了企业级程序的设计。

Spring体系结构

Spring是一种JavaEE开发中的一站式解决方案,所以其中包含的内容比较多,为了避免在应用中添加无用功能,所以Spring采用了非强制性的模块化结构,在具体应用中,可以根据应用所需要的功能进行选择添加。

Spring4+由6大模块20多个子项目构成,框架采用分层架构,根据不同的功能被划分成了多个模块,Spring的模块化是很强的,各个功能模块都是独立的,可以选择的使用

  • IoC将类之间的依赖关系从代码中脱离出来,用配置的方式进行依赖关系描述,由IoC容器负责依赖类之间的创建、管理和获取等工作

  • AOP进行横切逻辑编程,整合AspectJ这种AOP语言级的框架

  • Instrument允许在JVM启动时启用一个代理,通过该代理类在运行期修改类的字节码,改变一个类的功能

  • Test模块:支持Spring组件,使用JUnit或TestNG框架的测试

  • Data Access/Integration数据访问/集成

  • Web模块

Spring框架的主要功能

基于Java Beans的配置管理,采用IoC的原理,特别是对依赖注入技术的使用。这些都用来减少各组件间对实施细则的相互依赖性。

  • 一个核心的,全局适用的bean工厂
  • 一个一般抽象化的层面来管理数据库间的数据处理

建立在框架内的,对Java数据处理API和单独的JDBC数据源的一般性策略。因此,在数据处理支持上对Java企业版本环境的依赖性得以消除和一些整合持久化的框架,如Hibernate,JDO,iBATIS和db4o的整合

web应用中的MVC框架,基于核心的Spring功能,支持多种产生视图的技术,包括JSP、FreeMarker、Velocity、Tiles、iText和POI

大量的AOP框架以提供诸如数据处理管理的服务。同IOC的功能一样,目的是提高系统的模块化程度

Spring框架4大原则

  • 使用POJO进行轻量级和最小侵入式开发
    • POJO简单的Java对象Plain Ordinary Java Object实际就是普通JavaBeans,是为了避免和EJB混淆所创造的简称。
  • 通过控制反转IoC、依赖注入DI和基于接口编程实现松耦合
  • 通过AOP和默认惯例进行声明式编程
  • 使用AOP和模板编程减少模式化代码

受管bean

Spring中那些组成应用的主体以及由Spring IoC容器所管理的对象被称之为bean。Bean就是由Spring容器初始化、装配以及被管理的对象

bean是Spring管理的基本单位,在Spring的应用中所有的组件都是bean,bean包括数据源、 Hibernate的SessionFactory及事务管理器等。 Spring里的bean是非常广义的概念,任何的Java对象,Java组件都可被当成bean处理。甚至这些组件并不是标准的JavaBean

标签bean配置一个bean

在配置文件中使用id属性定义受管bean的名称,一般建议采用Java变量的命名规则,实际上使用123d或者12,3d都是可以的,需要注意Spring版本的区别。Id只能定义一个名称,如果需要定义多个可以使用name属性进行定义,这里使用id、name名称都可以获取受管bean。针对获取受管bean对象的名称而言,其它的名称都叫做别名

受管bean就是纳入到IoC/DI容器中,由容器负责创建和管理生命周期的javabean对象

<bean id=”受管bean的标识符,唯一,这里只能定义一个名称” class=”受管bean类的全名” 
name=”别名,可以定义多个,使用逗号分隔” 
scope=”范围,可以设置,默认singleton单例[Spring容器默认提供了单例模式的实现,不需要编码],
        prototype原型,每次获取的都是新建的对象,另外还有和web相关的3个配置request、session、global session”/>
  • Id命名建议采用Java变量的命名机制。注意Spring3-id命名规范比较严格,Spring3+命名中允许数字开头,允许使用包括空格在内的特殊符号,但是注意的是id只有一个名字,name允许使用特殊符号,是多个名称
  • id命名中空格是名称的一部分,name可以使用空格或者逗号分隔多个名称

受管bean的要求:一般来说任何java类都可以作为受管bean

  • class指向全类名,spring就是根据全类名,通过反射生成一个实例对象,id为这个实例对象的引用,所以必须在这个类中添加默认的构造方法,并且属性要有setter方法

scope设置受管bean范围

  • singleton单例,是默认属性:Spring将Bean放入Spring IoC容器的缓存池中,并将Bean引用返回给调用者,spring IoC容器负责对这些Bean进行后续的生命管理。BeanFactory只管理一个共享的实例。所有对这个特定bean的实例请求,都导致返回这个唯一bean实例的引用。即每次拿到的对象都是引用的同一个地址的对象。当一个bean被标识为singleton时候,spring的IoC容器中只会存在一个该bean
  • prototype原型:不管是BeanFactory或者ApplicationContext都是延迟加载使用的。每次对这个bean的实例请求都会导致一个新的实例的创建。当用户需要不受其他用户对象影响的对象或有类似的需求时,这是一个较理想的解决办法。即每次拿到的对象都是引用的不同地址的对象。相当于一个new的操作。清除prototype作用域的对象并释放任何prototype bean所持有的昂贵资源,都是客户端代码的职责
  • 以下3种scope都使用的较少,有request\session\global session,类似于JavaEE里面的request和session。在使用SpringMVC是可能会用到
    • request表示针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
    • session表示一个用户【客户】对应一个新的bean
    • global session作用域类似于标准的HTTPSession作用域,不过仅仅在基于portlet的web应用中才有意义

注意:对于struts2中的Action来说需要指明scope=prototype,因为struts2的Action要求是多实例、单线程的

总结

Spring是一个轻量级的控制反转IoC/DI依赖注入和面向切面AOP的开源容器框架,是一个开源的Java/Java EE全功能栈full-stack的应用程序框架,以Apache许可证形式发布

Spring是一个轻量级的DI/IoC和AOP容器框架。存在的目的是用于构建轻量级的JavaEE应用。

Spring以一种非侵入式的方式来管理你的代码,Spring提倡”最少侵入”,这也就意味着你可以适当的时候安装或卸载Spring

  • 目的:解决企业应用开发的复杂性
  • 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
  • 范围:任何Java应用

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值