前言:
软件应用分层架构
标准三层架构:
1:数据访问层:主要是对原始数据(数据库或者文本文件等存放数据的形式)的操作层,而不是指原始数据,也就是说,是对数据的操作,而不是数据库,具体为业务逻辑层或表示层,提供数据服务。
2:业务逻辑层:主要是针对具体的问题的操作,也可以理解成对数据层的操作,对数据业务逻辑处理,如果说数据层是积木,那逻辑层就是对这些积木的搭建。具体的讲主要负责对数据层的操作。也就是说把一些数据层的操作进行组合。
3:表示层:主要表示WEB方式,如果逻辑层相当强大和完善,无论表现层如何定义和更改,逻辑层都能完善地提供服务。主要对用户的请求接受,以及数据的返回,为客户端提供应用程序的访问。
spring所要处理的就是这三层的关系。
什么是spring?
spring是一个开源的框架,功能十分强大,同时也是一个轻量级的容器。
容器:
它帮我们管理业务逻辑层,里边有很多业务逻辑对象,有对象就有对象的生命周期的管理(创建,销毁)。
轻量级:
容器给予的业务逻辑对象多少种服务?spring给用户提供的服务完全有用户自己决定,spring想用什么服务自己开启使用。但是重量级的都是只要你用就把所有的服务都给你,不能自己定制。
spring容器从来不能独立运行,一定借助于其他容器启动,或者借助web容器启动,或者ejb容器启动。
特点:
应用模块之间耦合度小,组件都是可重用的,都是各自打包的。
Spring的核心组件:
(1)Spring Core(IOC) 核心容器,提供组件的创建、装备、销毁
(2)Spring Context Spring上下文,是一个接口ApplicationContext(继承自BeanFactory接口)的实现
(3)Spring Web容器,web应用上下文,是webApplicationContext接口的实现
(4)SpringDAO容器,是SpringDAO 支持模块,是为了简化DAO的使用
(5)SpringORM
(6)Spring AOP ,对AOP编程支持的模块
(7)Spring MVC,类似于Spring表示层的一个框架
就目前来说,刚巩固Spring所以重点学习IOC和AOP。
Spring ioc(核心部分):
ioc又被称为控制反转.分为两部分:DI(依赖注入)和DL(依赖查找)
DI:Dependency Injection依赖注入,组件不做定位查询,只提供相应方法,由容器创建对象,并调用相应方法设置所需对象需要的组件.
DL:Dependency Lookup依赖查找,容器创建对象并提供回调接口和上下文环境给组件,需要时通过接口从容器中查找对象
依赖查找,现在使用不太多。(EJB使用的更多,将对象创建好后,放到容器中。)
IOC解决:对象谁来创建的问题
DI解决:对象间的关系如何建立的问题。
org.springframework.beans及org.springframework.context包是IOC容器的基础
IOC的配置文件:
配置Spring通过读取配置元数据来对应用中各个对象进行实例化,配置以及组装,通常使用XML文件来作为配置元数据的描述格式。
可以将XML配置分别写在多个文件中
可以将多个配置放在一个String数组中传递给容器进行初始化
eg: ApplicationContext ac = new ClassPathXmlApplicationContext(
new String[]{"services.xml","daos.xml"})
也可以在XML中使用<import resource="" />来进行导入
XML基本结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=".....">
<bean id=".." class="..." >
<property name="..." ... />
</bean>
...
</beans>
IOC注入方式:
可以这样理解其实:Spring是用来管理bean的,也就是说你在写实体类怎么给它设置属性就怎么注入即:
(1)setter注入可以看作set方法设置属性(也就是说要想使用setter就必须 是bean提供get/set方法)有以下几种属性注入:
A、基本类型(8中基本类型+字符串)的装配(要想使用setter就必须 是bean提供get/set方法)
例子:
public class HelloBean {
private String name;
private int age;
public String sayHello(){
return "hello "+name +",your age is" + age;
}
.............
}
配置文件applicationContext.xml
<bean id="helloBean" class="ioc.HelloBean">
<property name="name">
<value>terry</value>
</property>
<property name="age" value="20">
</property>
</bean>
<!--id是Bean的唯一标识,要求在整个配置文件中要唯一,也可使用name属性
,bean标签里面的id和name属性都可以用来标识这个配置的对象,
-->
<!--property 对于所有用setter方式来注入的必须用Property来指定-->
<!--value 是对以基本类型,都用value来注入,可以实现自动的数据类型转换-->
B、对象类型的装配
C、集合的装配