首次学习Spring分享

Spring的作用

Spring的核心是控制反转(IoC)面向切面(AOP)
反转控制降低了,类于类之间的耦合

public class Service{
	private  Dao dao = new DapImpl();
	...
	}

如上面的service类,当创建一个service类的时候,必然也会创建一个Dao实现类,这种叫做强耦合,为了减少类与类间的耦合,当使用Spring的Ioc时,上面的service类可能这样写

public class Service{
	private Dao dao = null;
	public Dao setDao(Dao daoImpl){
	this.dao = daoOmpl; 
	}
	...
}

上面两个写法在于,Service中的成员变量dao怎样赋值,第一种写法在一创建service时就创建了一个dao实现类,第二种方法是通过set方法来进行赋值。第二种写法通过spring中数据注入来进行赋值,后面将结合例子介绍。同时这两种写法的更大的区别在于,第二种方法大大降低了service类和dao类的耦合,不再是一创建service就得也创建Dao类。
再简单的说就是,先把程序中所需要的类全部窜在一个容器里,当我们需要的时候从这个容器中获取。

IOC

IOC(Inversion Of Control):反转控制
是将组件间的依赖关系从程序内部提到外部来管理。使用IOC可以降低程序间的耦合,如何降低耦合,如上面简单介绍的那样。以前我们要使用一个类的实例时,我们都是通过new来获取一个实例,这是一种主动的模式,相当于我们需要时我们去创建一个实例,当当使用IOC时,这种创建的主动权和创建的时机将由我们自己交由第三方来控制,我们由需要时创建变成需要时获取。
接下来用一个例子来进一步介绍IOC和接下来的AOP。

IOC准备

导入spring开发包,导入依赖
在这里插入图片描述
在这里插入图片描述
导入相应的包之后,创建业务层和持久层
程序目录结构:
在这里插入图片描述
业务层
在这里插入图片描述
在这里插入图片描述
持久层:
在这里插入图片描述
在这里插入图片描述

接下来开始写配置文件
在resources文件下创建一个xml文件
1、在xml文件中加入相应的约束
2、让spring管理资源,在配置文件中配置service和dao
在这里插入图片描述
测试
在这里插入图片描述
在这里插入图片描述
bean标签
作用:用于配置对象让spring来创建。默认情况下它调用的是类中的无参构造方法,如果类中没有无参构造函数则不能创建成功。
属性
id:给对象在容器中提供一个唯一的标识,容器根据id来获取对应的对象。
class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造函数。
scope:指定对象的作用范围。取值有 singleton:默认值,单例的;prototype:多列的;这两个常用,还有其他值。
由上面的例子知道,在Service有一个成员变量AccountDao,在Service中并没有对它进行赋值,只是提供了一个set方法,在测试方法中也没有调用set方法进行赋值,但可以测试成功,那么accountDao是怎么被赋值的?接下来介绍spring的依赖注入。

依赖注入

DI(Dependency Injection)。它是spring框架核心IOC的具体表现。
在上面的例子中Service要实现具体的操作需要通过对象accountDao,但在Service并没有显示的创建dao对象。
依赖注入简单的说就是通过spring给类中的成员变量赋值,不用我们去辅助,这是降低程序间耦合的主要操作。
在这里我们注意到在配置service的bean标签里还有一个
property标签,通过配置这个标签spring会自动给accouDao赋值。property标签是通过调用set方法来变量赋值,所以我们提供了一个set方法。这里还有其它集中注入方法:

property标签:通过调用set方法对变量进行赋值,类中需提供set方法。
属性:
name:找的是类中set方法后面的部分
ref:给属性赋值的类型是其他bean类型(一个类,如service中的accountDao)
value:给属性赋值是基本数据类型和String类型

constructor-arg标签:通过构造方法给成员变量赋值,需要提供带参构造函数
属性:
index:指定参数的在构造函数参数列表的索引位置
type:指定参数在构造函数中的数据类型
name:指定参数在构造函数中的数据类型
(以上三个都是找给谁赋值)

value:它能赋的值是基本数据类型和 String 类型。
ref:它能赋的值是其他 bean 类型,也就是说,必须得是在配置文件中配置过的 bean。
以上两个标签都在bean标签内部使用
以上两种是常见使用方法。还有其他类型变量的的注入方式,比如集合类对应的是不同的标签。
(以上若有错误,或不顺的地方,欢迎指教)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值