java----spring框架

注:本文来自于网络或者老师的总结资料,本人仅为摘录,想了解更多相关资料,可以关注:

http://blog.csdn.net/pu_xubo565599455

什么是spring框架?

  Spring 是一个开源框架,是一种整合性的框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。至03年spring框架发布以来到现在pring框架已经发展成JavaEE开发中的非常重要的一个框架。虽然还是有公司采用自己的方式来处理代码间的耦合问题,但是他们采用的方式依旧是Spring框架的基础,即:工厂模式与服务定位器模式等。

  Spring是为企业应用开发提供的一个轻量级解决方案,包括:基于依赖注入的核心机制,基于AOP的声明式事务(联想下编程式事务),整合多种持久层技术的整合,整合很多优秀的WEB MVC框架等。Spring是致力于JavaEE应用各层的解决方案,而不是单单针对某一层。Spring贯穿表现层,业务层,持久层,但是Spring并不想取代那些已有的框架,而是以高度的开发性与它们无缝整合。

spring框架优点?

1、 低侵入式设计,代码的污染极低。

2、 Spring容器降低了业务对象替换的复杂性,提高了组件之间的解耦。

3、 Spring的AOP支持允许将一些通用任务如:安全,事务,日志等进行集中式处理,从而提供了更好的复用。

4、 Spring的ORM和DAO提供了与第三方持久化框架的良好整合,并简化了底层的数据库访问。

5、 Spring的高度开发性,并不强制应用完全依赖于Spring,开发者可自由选择Spring框架的部分或全部。

spring--IOC

  IOC 即 Inversion Of Control,控制反转或者称之为依赖注入。IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。在工作中, JAVA实例的调用者通过new关键字来创建被调用者的JAVA实例,程序高度耦合,效率低下,真实的应用极少使用这种方式,一般是初学者最喜欢。有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。依赖注入是目前最优秀的解耦方式,依赖注入让Spring的Bean以配置文件组织在一起,而不是以硬编码的方式耦合在一起。

依赖注入通常有如下两种方式:

设值注入:IOC容器使用属性的Setter方法来注入被依赖的实例。

构造注入:IOC容器使用构造器来注入被依赖的实例。

设值注入

设值注入是指IOC容器使用属性的Setter方法来注入被依赖的实例。这种注入方式简单、直观,因而在Spring的依赖注入里大量使用。

例外:

注意:Spring推荐面向接口编程,可以更好的让规范和实现分离,从而提供更好的解耦,对于一个JAVAEE应用,不管是DAO组件,还是业务逻辑组件,都应该先定义一个接口,该接口定义组件应该实现的功能,但是功能的实现则由其实现类提供。

我们先定义2个接口,如:

然后,分别实现其实现类,如:

最后,我们在applicationContext.xml的<beans></beans>中分别配置2个JAVABEAN实例,并配置其关系管理。如:

在配置文件中,Spring配置Bean实例通常会指定2个属性:

Id:指定该Bean的唯一标识,程序通过ID属性值来访问该BEAN实例。

Class:指定该BEAN的实现类,此处不可再用接口,必须使用实现类,Spring容器会使用XML解析器读取该属性值,并利用反射来创建该实现类的实例。

从上面的示例中,可以分析出,依赖注入以配置文件管理BEAN实例之间的耦合,让BEAN实例之间的耦合从代码层次分离出来,依赖注入是一种优秀的解耦方式。

分析得到SpringIOC容器的3个基本要点:

1、 应用程序的各组件面向接口编程。面向接口编程可以将各组件之间的耦合提示到接口层次,从而有利于项目后期的发展。

2、 应用程序的各组件不再由程序主动产生,而是由Spring容器来负责产生、并初始化。

3、 Spring采用配置文件、或Annotation来管理Bean的实现类、依赖关系,Spring容器则根据配置文件、利用反射来创建实例,并为之注入依赖关系。

构造注入:

前面我们介绍,通过setter方法为目标Bean注入依赖关系的方式,被称为设值注入:另外还有一种注入方式,这种方式在构造实例时,已经为其完成了依赖关系的初始化。这种利用构造器来设置依赖关系的方式,被称之为构造注入。

import com.lovo.beans.CardInfoT;

import com.lovo.dao.ICardDao;

import com.lovo.service.ICardService;

public class CardServiceImpl implements ICardService {

private ICardDao cardDaoImpl;

//默认的构造器,如果要设置有参构造,需要先显示执行无参构造

public CardServiceImpl(){

}

/**

* 构造注入所需的带参数的构造器

* @param cardDao

*/

public CardServiceImpl(ICardDao cardDao){

this.cardDaoImpl = cardDao;

}

public void saveCard(CardInfoT card) {

// TODO Auto-generated method stub

cardDaoImpl.saveCard(card);

}

}

applicationContext.xml中添加配置为:

<!-- 由spring容器创建实例化对象,并管理对象之间的关系 -->

<bean id="cardDaoImpl" class="com.lovo.dao.impl.CardDaoImpl"></bean>

<!-- spring构造注入-->

<bean id="cardServiceImpl" class="com.lovo.service.impl.CardServiceImpl">

<!-- 使用构造注入,为 cardServiceImpl实例注入cardDaoImpl实例-->

<constructor-arg ref="cardDaoImpl"></constructor-arg>

</bean>

两种注入方式的对比:

Spring同时支持两种依赖注入方式:设置注入和构造注入。两种注入方式,并没有绝对的好坏之分,只是适应的场景有所不同。

相比之下,设置注入具有如下优点:

1、 与传统的JavaBean的写法更相识,程序开发人员更容易理解、接受、通过setter方式设定依赖关系显得更加直观、自然。

2、 对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建Bean实例时,需要同时实例化其依赖的全部实例,因而导致性能下降。而使用设置注入,则可以避免。

3、 尤其是在某些属性可选的情况下,多参数的构造器更加笨重。

当然,构造注入也不是绝对不如设值注入,某些特定的场合,构造更适合。构造也有如下优点:

1、 构造注入可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入,常常需要依赖于Datasource的注入。采用构造注入,可以在代码中清晰地决定注入顺序。

2、 对于依赖关系无须变化的Bean,构造注入更有用处。因为没有setter方法,所有的依赖关系全部在构造器中设定,因此,无须担心后续的代码对依赖关系产生破坏。

3、 依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系。对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则。

建议采用以设值注入为主,构造注入为辅的注入策略。对于依赖关系无须变化的注入,尽量采用构造注入;而其他的依赖关系的注入,则考虑采用设值注入。

Spring 容器

  Spring提供了两个核心接口:BeanFactory和ApplicationContext,其中applicationContext是BeanFactory的子接口。他们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并管理容器中的Bean。Bean是Spring管理的基本单位,在基于Spring的JavaEE应用中,所有的组件都被当成Bean处理,包括数据源、Hibernate的SessionFactory、事务管理器等。

BeanFactory:

Spring容器最基本的接口就是BeanFactory,该接口负责配置、创建,管理Bean,它有一个子接口;AppcationContext,也被称为Spring上下文。Spring容器还负责管理Bean与Bean之间的依赖关系。

调用者只需使用getBean()方法即可获得指定Bean的引用,无须关心Bean的实例化过程。

BeanFactory有一个常见的实现类:org.springframework.beans.factory.xml.XmlBeanFactory类。

ApplicationContext是BeanFactory的子接口,对于大部分JavaEE应用而言,使用它作为Spring容器更方便。其常见实现类是:FileSystemXmlApplicationContext、ClassPathXmlApplicationContext和AnnotataionConfigApplicationContext。如果在web应用中使用Spring容器,通常有XmlWebApplicationContext、AnnotatioinConfigWebApplicationContext两个实现类。

大部分的JavaEE应用,可以在启动WEB应用时自动加载ApplicationContext实例,接受Spring管理的Bean无须知道ApplicationContext的存在,一样可以利用ApplicationContext的管理。对于独立的应用程序,也可通过如下方法来实例化BeanFactory。

1、

//搜索当前文件路径下的beans.xml文件创建Resource对象

InputStreamResource isr = new FileSystemResource(“beans.xml”);

//以Resource对象作为参数,创建BeanFactory对象

XmlBeanFactory factory = new XmlBeanFactory(isr);

或者采用:

2、

//搜索类加载路径,以类加载路径下的beans.xml文件创建Resource对象

ClassPathResource res = new ClassPathResource(“beans.xml”);

//以Resource对象作为参数,创建BeanFactory对象

XmlBeanFactory factory = new XmlBeanFactory(res);

如果需要同时加载多个XML配置文件,则可以采用如下方式:

//搜索CLASSPATH路径,以CLASSPATH路径下的applicationContext.xml、Bean.xml、Service.xml文件创建ApplicationContext

ApplicationContext appContext = new ClassPathXmlApplicaation(new String[“beans.xml”,”service.xml”]);

ApplicationContext:

大部分时候,我们都不会使用BeanFactory实例作为Spring 容器,而是使用ApplicationContext实例作为容器,因此我们也把Spring容器称为Spring上下文。ApplicationContext是BeanFactory接口的子接口,它增强了BeanFactory的功能。

ApplicationContext允许以声明式方式操作容器,无须手动创建它。可利用如ContextLoader的支持类,在WEB应用启动时自动创建ApplicationContext。当前,也可以采用编程方式创建ApplicationContext.

BeanFactory与ApplicationContext实例化容器中Bean的时机不同,前者等到程序需要Bean实例时才创建,而后者在容器创建ApplicationContext实例时,会预初始化容器中的全部Bean。

因为采用ApplicationContext作为Spring容器,创建容器时会同时创建容器中所有singleton作用域Bean,因此可能需要更多的系统开销。但一旦创建成功,应用后面的响应速度就会更快,因此,对于普通的JavaEE应用,推荐使用ApplicationContext作为Spring容器。

实际上Spring允许singleton作用的Bean指定lazy-init=”true”,该属性将改变singleton Bean实例的默认行为,强制取消该Bean实例预初始化,则该Bean将不会随着ApplicationContext启动而预实例化。

时间: 2024-10-06 02:38:36

java----spring框架的相关文章

认识Java Spring 框架

谈起Java  开发总是离不开各种框架,当我们在使用Java初期就被各种框架的包围着,而.Net开发就比较简单了,从WinForm到Asp.Net再到APS.Net Mvc,一气呵成,开发起来那叫一个爽,但是也带来了一些问题,比如,.Net 开发者使用微软已经封装好的类库,程序员在日常的开发过程中,都不知道自己所使用的类库有多么精妙,但是Java就不一样了,它是完全开源的,可以按照自己的需求加载适合的类库,作为开发者就可以知道大牛们写的牛叉代码,也可以看到代码的重构的美妙之处.今天我们就来谈一谈

基于java spring框架开发部标1078视频监控平台精华文章索引

部标1078视频监控平台,是一个庞杂的工程,涵盖了多层协议,部标jt808,jt809,jt1078,苏标Adas协议等,多个平台功能标准,部标796标准,部标1077标准和苏标主动安全标准,视频方面的协议有RTSP, RTMP, RTP, 音视频编码有H.264, AAC,  726,711等,消化这些协议和功能标准就已经是需要一个较长的周期了,而构建一个视频平台的架构,也是比较复杂的,后端不仅有网关,还要有流媒体服务器,转发服务器,播放器,RTSP或RTMP服务器等多个服务器模块,需要的技术

java spring框架的HelloWord

工作原因,需要了解java了.现在java开发好像基本都是spring这一套,而且初次了解的时候,实在是一头雾水. spring, spring-boot, spring-cloud, AOP,mybatis, zookeeper, Eureka, apollo, consul等等技术,涉及面太广. VS code作为编辑器可以,作为IDE用起来不太方便,我换了的eclipse学习的spring框架. 工程使用 项目使用start.spring.io中的脚手架搭建spring-boot的mave

java spring框架的定时任务

由于测试的原因,最近有接触java spring  @Scheduled的定时任务,当时还以为配置起来表达式和crontab是完全一样的,没想到还有些许不一样. 在spring中,一个cron表达式至少有6个或者7个被空格分隔的时间元素. 如下: 举例: 0 0/5 * * * ?就是每隔5分钟触发 0 15 10 * * ?   每天上午10:15触发 ps:用法: 然后再在配置文件(如application.properties文件)中设置  即可. 而在linux contab中,是5位时

《Java Spring框架》通过Idea 整合Spring和Mybatis

1. Jar包下载 百度云下载:链接: https://pan.baidu.com/s/1sVUovsBfj8NWdthGIbyqGA 提取码: 8v3u 复制这段内容后打开百度网盘手机App,操作更方便哦 2 通过IDEA整合 第一步:新增项目 第二步:不通过Gradle也可以的,选好java 和 web 点击下一步. 第三步:取个名字 第四步:设置Gradle 和 JDK版本,当然没有gradle也不影响的. 第五步:新增lib文件,用于存放下载的jar包,也可以通过Gradle下载. 第六

基于Java spring框架的微信企业号开发中关于js-sdk的配置

在调用js-sdk的第一步,我们需要引入js-sdk的js链接,然后执行wx.config,官方示例如下所示: 1 wx.config({ 2 debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印. 3 appId: '', // 必填,企业号的唯一标识,此处填写企业号corpid 4 timestamp: , // 必填,生成签名的时间戳 5 nonceStr: ''

《Java Spring框架》Spring ConfigurationClassPostProcessor源码分析

先看一个案例: package accelerate1.bean; public class Test1 { } package accelerate1.bean; public class Test2 { } package accelerate1.app; import accelerate1.bean.Test1; import accelerate1.bean.Test2; import org.springframework.context.annotation.Bean; impor

Java - Struts框架教程 Hibernate框架教程 Spring框架入门教程(新版) sping mvc spring boot spring cloud Mybatis

https://www.zhihu.com/question/21142149 http://how2j.cn/k/hibernate/hibernate-tutorial/31.html?tid=63 https://www.zhihu.com/question/29444491/answer/146457757 1. Java - Struts框架教程Struts 是Apache软件基金会(ASF)赞助的一个开源项目.通过采用JavaServlet/JSP技术,实现了基于Java EEWeb

Java Spring MVC分层设计(转)

原文:https://blog.csdn.net/chris_mao/article/details/48694243 第一次尝试着用Java做Web开发,使用了Java Spring框架,顺便说一句,如果使用Spring开发,建议使用STS(Spring Tool Suite) IDE,它很好的集成了Spring.Maven等框架,使用起来特别方便,尤其是第一次使用Spring框架进行开发,它极大的方便了开发人员,通过快捷菜单及可很简单的配置好Spring开发环境,自动下载.更新Maven依赖

atititt.java定时任务框架选型Spring Quartz 注解总结

atititt.java定时任务框架选型Spring Quartz 总结 1. .Spring Quartz  (ati recomm) 1 2. Spring Quartz具体配置 2 2.1. 增加context,task命名空间xml: 2 2.2. 增加xsi:schemaLocation valide 2 2.3. 我们的task任务扫描注解in spr.xml 2 2.4. 设置运行方法 3 2.5. 设置输出日志 3 3. 运行测试sprX走ok兰. 4 4. Quartz Sch