初学Spring框架整理笔记——(一)

 

一、Spring框架简介

Spring 是最受欢迎的企业级 Java 应用程序开发框架,Spring 框架的核心特性是可以用于开发任何 Java 应用程序(Java,JavaWeb)

◆目的:解决企业应用开发的复杂性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

◆范围:任何Java应用

二、IOC和DI

Spring是一个基于IOC和AOP的JavaEE系统框架

1.IOC(Inversion Of Control)百科解释:

面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。

简单来说,控制反转是Spring的基础, 在传统的程序设计过程中,通常由调用者 来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转; [简 单点描述: 以前是自己new对象,现在交给Spring创建对象]

所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

2.DI

IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的,Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。

三、spring容器

Spring容器是什么?

Spring容器是Spring的核心,一切Spring bean都存储在Spring容器内,并由其通过IoC技术管理。Spring容器也就是一个bean工厂(BeanFactory)。应用中bean的实例化,获取,销毁等都是由这个bean工厂管理的。

Spring容器究竟是什么。。。

org.springframework.context.ApplicationContext接口用于完成容器的配置,初始化,管理bean。一个Spring容器就是某个实现了ApplicationContext接口的类的实例。也就是说,从代码层面,Spring容器其实就是一个ApplicationContext。

在普通的JAVA工程中,我们可以通过代码显式new一个ClassPathXmlApplicationContext或者FileSystemXmlApplicationContext来初始化一个Spring容器。

在Web工程中,我们一般是通过配置web.xml的方式来初始化Spring容器。

四、BeanFactory和ApplicatiomContext

都是接口,ApplicatiomContext是BeanFactory的子接口,BeanFactory是Spring里最底层的接口,提供了最简单的容器功能,只提供了实例化对象和拿对象的功能。而ApplicatiomContext是作为更高级的容器。

加载方式的区别:BeanFactory采用的是延时加载的形式来注入bean;ApplicatiomContext则相反,它是在Ioc启动时就一次性创建所有的bean,好处是可以马上发现Spring配置文件中的错误,坏处是造成浪费

五、Spring框架中bean的生命周期

1,Spring容器从XML文件中读取bean的定义,并实例化bean

2,Spring根据bean的定义填充所有的属性

3,如果Bean类有实现BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。

4,如果Bean类有实现BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身。

5,如果有BeanPostProcessors和Bean关联,那么其postProcessBeforeInitialization()方法将被将被调用。

6,如果Bean类已实现InitializingBean接口,则执行他的afterProPertiesSet()方法

7,可以在Bean定义文件中使用"init-method"属性设定方法名称例如:

      如果有以上设置的话,则执行到这个阶段,就会执行initBean()方法

8,如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法

9,当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用那个其实现的destroy()方法;

10,最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

六、AOP

1.1代理模式

百度百科定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

优点

(1).职责清晰

真实的角色就是实现实际的业务逻辑,不用关心其他非本职责的事务,通过后期的代理完成一件完成事务,附带的结果就是编程简洁清晰。

(2).代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了中介的作用和保护了目标对象的作用。

(3).高扩展性

2.1JDK代理

在JDK1.5之后提供了一 个"java.lang.reflect.Proxy"类,通过"Proxy"类提供的一个newProxyInstance方法用来创建一个对象的代理对象。

在java中规定,要想产生一个对象的代理对象,那么这个对象必须要有一个接口,所以我们第一步就是设计这 个对象的接口,在接口中定义这个对象所具有的行为(方法),例如定义一个Person接口,里面定义两个方法,一个是唱歌,一个是跳舞。

2.2GCLIB动态代理

被代理的类是可以不用实现任何接口的,就像一个普通类,但是要注意的是,这个普通的类不能用final修饰,因为cglib技术是动态生成字节码技术,这个动态代理会生成一个继承被代理类的类的字节码。

三、简单的例子(一)

建立maven项目

1.在pom.xml文件中添加依赖

2.在pojo包里创建实体类AB,其中包含有参和无参构造器,Get Set方法

 3.在recources目录下新建核心配置文件applicationContext.xml   

4.测试,进行单元测试

说明: 加载配置文件,参数为核心配置文件名;返回一个Object对象,使用getBean方法,参数为核心配置文件中的

 

 


总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值