spring框架第一节

----spring框架----

1.Spring框架作用

a,Spring Core(IOC功能)

b.Spring AOP

(管理组件对象,维护对象关系,目的组件耦合度)

c.Spring Web MVC功能

(MVC设计,目的:架构一个MVC结构的Web程序)

d.Spring整合其他技术,例如JDBC,MyBatis,Hibernate,Struts

Spring--->整合API---->调用原有技术API

扫描二维码关注公众号,回复: 2225547 查看本文章

在Spring中使用整合API编程

Spring--->JdbcTemplate---->Connection,Statement

JdbcTemplate.update(sql,params)

请求--->Servlet---->Service---->多个Dao

2,SpringIOC应用

(1),管理对象

a.创建,

<!-- 声明一个组件bean(加一个bean的定义)

此处等价于GregorianCalendar组件给spring框架组装上了,采用new GregorianCalendar()逻辑

以后我们只要根据配置文件,实例化Spring容器对象ApplicationContext,然后容器对象ApplicationContext创建我们声明过的bean定义,属性id的作用是将来在代码中获取bean对象时根据id来获取,id具有唯一性

-->

<bean id="c1" class="java.util.GregorianCalendar">

</bean>

.Spring创建Bean对象的控制

不同的创建方式,组件bean的写法也不同

控制对象创建的方式(使用方式)

在<bean>元素中使用scope属性控制

scope可以支持singleton或prototype

默认值是singleton

<bean scope="singleton">该组件在Spring容器里只有一个bean对象

<bean scope="prototype">该组件每次ac.getBean("id");都返回一个新的对象

默认情况下用单例,如果对象很少,用单例,可以节省资源

但是有属性定义的情况下,别用单例的

public class xxx{

private User user;

public void f1(){

对user操作

}

}

如果这中结构的组件是单例的,意味着它的属性也是单例的,只有一个对象了

,private User user也只有一个,如果两个人同时想去调用组件的方法,只有一个private

User user,就不知道存谁的数据,这就属于一种并发,在你处理更多的业务的时候,一个对象为两个人或更多的的人来服务,它这一个属性不知道该存谁的数据、

b.初始化,

指定对象初始化方法

对象在创建完以后,我们有时需要做初始化的一些操作怎么做呢

之前我们可以用构造器初始化,现在我们利用<bean>元素的init-method,当创建对象后自动执行

init-method方法,这两种方法有没有区别呢?

写在init-method里面的代码比写在构造器里面的代码要执行得晚一点。因为init-method是在对象创建完才执行的,

c.释放资源,销毁

指定对象销毁方法

一般我们需要做什么样的操作才能释放掉对象资源呢?

假如说我用了一个对象,这个对象我不用了,我想让他尽快的释放掉,调垃圾回收器对象,可以把对象设置为null,他就不指向内存中的任何对象了,垃圾回收器就可以。

利用<bean>元素的destroy-method指定

满足下面条件才有效

---组件对象为单例模式

---调用AbstractApplicationContext容器对象的close()方法

d.控制单例对象创建时机

在声明了一个bean组件之后,这bean里面的对象什么时候创建

在非单例的情况下,执行ac.getBean()的时候,bean里面的对象创建了,

在单例的情况下,bean里面的对象只会有一个,这个唯一的对象默认情况下会在创建容器的时候创建出来。

启用延迟实例化lazy-init="true"

在默认情况下,单例对象是Spring容器创建时实例化,;可以用<bean>元素的lazy-init=true属性

(2),维护对象关系

一个对象创建出来之后,如何把其他的信息往对象里面传进去,

我们可以用注入的方式在对象里去使用其他的信息

Dependency Injection 依赖注入

依赖注入:set 方法注入,构造器注入

c.搭建SpringIOC开发环境

---引入相关jar包

--在src添加applicationContext,

如果用spring ioc的话,它可以降低”字符串“对象和Computer对象之间的关联,它是如何降低关联呢?

首先我们把computer交给spring容器,再用set方式将字符串“对象注入Computer对象,这样的话更改字符串对象时候也不用对Computer对象的代码进行更改。

以低耦合的形式把数据传入,构造器注入,构造器走构造方法,带参数的构造方法

现在把phone组件写好了,为了接收两个值,我们写了个带两个参数的构造方法,通过这个构造器,这两个参数把两个值传进来

对象与对象之间

为了将Student对象和Computer和phone对象进行解耦,我们也用注入的形式

从这个组件上去看,这个student对象要是创建出来,默认初始化,这两个变量应该都是null,然后这里掉show方法就会空指针,如果说在我们spring容器当中,我们就可以用在Student里注入Computer对象,Phone对象

IOC概念

Inversion of Control 控制反转或反向控制

控制反转:改变了对象获取方式。之前编码方式采用new 构造器方式获取对象,ioc中采用由容器创建对象之后注入进来使用.只要修改配置文件就可以改变对象关系。

猜你喜欢

转载自blog.csdn.net/zerolaw/article/details/81082006