Spring框架入门篇(1)

什么是框架
Spring简介
IOC(配置)
Bean(配置、注解)
AOP(配置、注解、AspectJ、API)
1. spring官方网站首页 http://spring.io/
2.官网中ioc与aop所在的网页 http://projects.spring.io/spring-framework/

首先得明spring是一个开源框架,最初是为了解决企业应用开发的复杂性而创建的,但是现在不止是应用于企业应用。是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的容器框架。通过IOC可以达到松耦合的目的提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。spring包含并管理应用的配置和生命周期,这个意义生是一种容器将简单的组件配置,组合成为复杂的应用,这个意义上市框架。
在spring上开发应用 简单 方便 快捷。而且带来了复杂JavaEE开发的春天。
spring的作用: 1:容器
2:提供了对多种技术的支持 ()JMS MQ支持 UnitTest …. 3:AOP(事务管理 ,日志 等)
4:提供了众多方便的辅助类(JDBC Template等)
5:对主流应用框架(Hibernate)提供了良好的支持。
适用范围:构建企业应用(springMVC+Spring+Hibernate/ibatis)
单独使用Bean容器
单独使用AOP进行切面处理
其他的Spring功能 如:对消息的支持等在互联网中的应用。

Spring能很好的与各大框架进行了集成,不用spring还要用创建一个工厂来创建对象,这个spring相当与做了这个工厂帮你做了创建对象的功能,还有它通过AOP帮助你管理事务,你在用Hibernate的时候如果不用spring的时候是不是每次都要写事务的提交这些代码有了它帮你管理后你就不必去管事务提交了没有。还有它的面向切面编程(AOP)还可以在你写要记录日志的时候添加一条记录后需要在数据里同时添加一条添加成功了或失败的记录那么就可以用Spring里的Aop来处理,虽然不用Aop也能做但是不用Spring的Aop你就会写很多重复的代码了。

它(ioc)会帮你去维护对象的创建,你只要用就可以了。
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
◆轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。
◆控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
◆面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
◆容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
◆框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

Spring的两大核心AOP与IOC,可以单独用于任何应用,包括与Struts等MVC框架与Hibernate等ORM框架的集成,目前很多公司所谓的轻量级开发就是用 Spring + Struts(2)+Hibernate。
Spring MVC就是一个MVC框架,个人觉得Spring MVC annotation式的开发比Struts2方便,可以直接代替上面的Struts(当然Struts的做为一个非常成熟的MVC,功能上感觉还是比Spring强一点,不过Spring MVC已经足够用了)。当然spring mvc的执行效率比struts高,是因为struts的值栈影响效率

spring mvc类似于struts的一个MVC开框架,其实都是属于spring,spring mvc需要有spring的架包作为支撑才能跑起来

如果有人问你什么事控制反转(spring的核心面试常问道):你就回答,本来程序是由我们new 出来的嘛,后来交给程序控制进行new出来了嘛,这就是控制反转嘛。

框架的特点
-半成品
-封装了特定的处理流程和控制逻辑
-框架是成熟的、不断改进的软件

框架与类库的区别
-框架一般是封装了逻辑、高内聚的
-类库是松散的工具组合
-框架专注于某一领域,类库则更通用

为什么使用框架
-软件系统日趋复杂
-重用度高,从而提高开发效率和提高质量
-软件设计人员要专注于对领域的两节,使需求分析更充分
-易于上手、快速解决问题
**接口:用户沟通的中介物的抽象化。在Java8中,接口可以拥有方法体。

抽象类:

普通类:
面向接口编程:分清层次及调用关系,每层只向上提供一组功能接口,各层间依赖接口而非实现类。而且,接口实现的变动并不影响各层的调用。其实“接口”是用于隐藏具体实现和实现多态性的组件。

Spring IOC是一种设计模式,使对象不用显示的创建依赖对象,而是将对象创建的过程交给Spring的IOC容器去管理,通过依赖注入的方式,来实现IOC;
依赖注入的方式有两种:
1、设值注入:即通过XML中配置bean的依赖类,通过层级property属性,来配置依赖关系,然后Spring通过setter方法,来实现依赖类的注入;
2、构造器注入:方法同设值注入,不过具体实现的方法是通过显示的创造一个构造方法,构造方法的参数名称要与XML中配置的name名称一致,XML配置的标签为constructor-arg

IOC:(控制反转)控制权的转移,应用程序本身并不负责依赖对象的创建和维护,而是由外部容器负责创建和维护。
DI(依赖注入)是IOC的一种实现方式。
目的:创建对象并且组装对象之间的关系。
构造器注入:在xml文件中是constructor_arg,
需要显式地写出InjectionServiceImpl(InjectionDAO injectionDAO)的构造器
设置注入:在xml文件中是property,
无需写出构造方法,要写setInjectionDAO(InjectionDAO injectionDAO)的设值方法**

spring——bean的配置及作用域

*Bean配置项
*Bean的作用域
*Bean的生命周期
*Bean的自动装配
*Resources&ResourceLoader

1.bean的常用配置项:(理论上只有class是必须的)
id:唯一标识
class:具体是哪一个类
scope:范围
constructor arguments:构造器的参数
properties:属性
Autowiring mode:自动装配模式
lazy-initialization mode:懒加载模式
initialization/destruction method:初始化/销毁的方法
2.bean的作用域
singletion 单例 bean容器只有唯一的对象(默认模式)
prototype 每次请求会创建新的实例,destory方式不生效
request 对于request创建新的实例,只在当前request内有效
session 对于session创建新的实例,只在当前session内有效
global session 基于portlet(例如单点登录的范围)的web中有效,如果在web中同session
bean的作用域:

spring——bean的生命周期

生命周期:定义,初始化,使用,销毁
一.初始化:
方法1.实现org.springframework.beans.foctory.InitializingBean接口,覆盖afterPropertiesSet方法。系统会自动查找afterPropertiesSet方法,执行其中的初始化操作
方法2.配置init-method
例如设置bean中init-method=”init”那么在初始化过程中就会调用相应class指定类的init()方法进行初始化工作

二 销毁(与初始化类似)
方法1.实现org.springframework.beans.foctory.DisposableBean接口,覆盖destory方法。
方法2.配置destory-method

三 配置全局初始化、销毁方法(属于默认配置,参考截图)

注意:
当三种方式同时使用时,全局(默认的)初始化销毁方法会被覆盖。
另外实现接口的初始化/销毁方式会先于配置文件中的初始化/销毁方式执行。
即使没有以上三种初始化方法也是可以编译执行的

Spring Bean装配之Aware接口
1.ApplicationContextAware
1.1 接口方法:setApplicationContext
1.2 作用:通常用来获取上下文对象,声明全局变量后在方法中对变量进行初始化并供其他方法调用
1.3 实现过程:创建一个类并实现ApplicationContextAware接口,重写接口方法public void

Bean的自动装配(Autowiring)

1.No:不做任何操作
2.byname:根据属性名自动装配。此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配
3.byType:如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配;如果存在多个该类型的bean,那么抛出异常,并指出不能使用byType方式进行自动装配;如果没有找到相匹配的bean,则什么事都不发生
4.Constructor:与byType方式类似,不同之处在于它应用于构造器参数。如果容器中没有找到与构造器参数类型一致的bean,那么抛出异常

Bean的自动装配:在beans标签配置属性
default-autowire=”no/byName/byType/constructor”
作用为:省去了在Spring的xml中配置property标签和constructor-arg标签,只需要配置bean标签即可
PS:byName和byType为设值注入,constructor为构造注入;
byName要求bean标签的id属性需要和成员变量的名称一致,
byType和constructor则跟id无关

Resources (针对于资源文件的统一接口)

A、UrlResource:URL 对应的资源,根据一个 URL 地址即可获取
B、ClassPathResource:获取类路径下的资源
C、FileSystemResource:获取文件系统里面的资源
D、ServletContextResource:ServletContext 封装的资源,用于访问 ServletContext 环境下的资源
E、InputStreamResource:获取输入流封装的资源
F、ByteArrayResource:获取字节数组封装的资源

通过实现 ApplicationContextAware 接口中的方法
setApplicationContext(ApplicationContext applicationContext)

Resource resource = applicationContext.getResource(“xxx”);

classpath:config.txt
file:C:\config.txt
ftp:C:\config.txt
http://www.baidu.com/more/

Bean 的定义及作用域注解

A、@Controller :注解控制器类(控制层 MVC)
B、@Service :注解服务类(服务层)
C、@Repository :注解 DAO 类(持久层)
D、@Component :将普通的 bean 注解到 spring 容器中,相当于配置文件中的
< bean id=”xxx” class=”xxx”/>

元注解(Meta-annotations)
元注解即是许多 Spring 提供的注解可以作为自己的代码,元注解是一个简单的注解,可以应用到另一个注解
除了 value() 元注解还可以有其他的属性,允许定制

类的自动监测及 Bean 的注册
Spring 可以自动检测类并注册 Bean 到 Applicationcontext 中
< context:annotation-config />
通过基于 xml 的 Spring 配置

为了能够自动检测到这些类并注册相应的 Bean ,需要
< context:component-scan base-package=”xxx” />

<context:component-scan> 包含 <context:annotation-config>,

通常使用前者后,就不需要再使用后者
使用过滤器进行自定义扫描

A、默认情况下,类被自动发现并注册 bean 的条件:使用 @Component @Repository @Service @controller 注解或者使用 @Component 的自定义注解
B、可以通过过滤器修改默认注解的行为
C、还可以使用 use-default-filters = “false” 禁用自动发现与注册

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值