Spring简介,搭建Spring环境——轻量级容器框架(一)

这篇博文介绍Spring框架的基本理论,并搭建一个简单的Spring开发环境。

Spring是什么?

Spring是一个集成了许多第三方框架的大杂烩,其核心技术是IOC(控制反转,也称依赖注入)和AOP(面向切面编程),所以spring既是一个IoC容器,也是一个AOP框架。知道了什么是Spring是学习的开端,下面说一下为什么使用Spring。

为什么使用Spring?

 我们知道没有Spring,Struts和Hibernate可以很好的工作,在开篇中我把没有Spring的架构称为“独木桥”,有Spring的架构称为“阳光大道”。说白了,Spring解决了企业应用开发的复杂性,用基本的javaBean来完成EJB的事情,从大小和开销方向说,Spring都是轻量级的。Spring具有很多的优点:

1、使我们的分层更好。

     SSH框架系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层(实体层)。


从上图我们可以看到Spring处于业务逻辑层,担任连接Struts和Hibernate桥梁的角色。系统的整个层次关系可以一目了然。

2、对象管理更好。

      从上图,我们看到Spring将Transactions、Session以及业务层服务都放到了业务逻辑层来管理。系统的条理变得更加清晰,不仅使持久化层的职责更加单一,而且提高了系统的灵活性。 
 

3、AOP

       面向切面编程,AOP让开发人员创建非行为性的关注点,并将它们插入到应用代码红。公共服务(比如日志、持久性、事务等)就可以就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。

 

4、IoC

      IoC,用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

 

用途

      对于Spring的用途很多,但是Spring的核心和经典我们可以简化为三部分:

1、IoC容器可以将对象之间的依赖关系交由Spring管理,进行控制。

2、AOP方便进行面向切面编程,是oop的扩展,想加什么功能直接加。

3、能够集成各种优秀的框架,struts、Hibernate等等,还有很多,不再一一罗列。

 

架构图


 相信你能看出来这是Spring的架构图,Spring包含了许多的特性,其实都包含在六个模块中:Core、AOP、DAO、ORM、JEE和Web,其实我们对它们并不陌生,当你学习或使用Spring时,至少已经使用了三部分的内容:DAO、ORM(对象关系映射)、Web。下面我们逐个看一下:

1、DAO

      DAO框架封装了所有的数据库访问的操作,Spring提供了对DAO的支持,还有模版jdbc,进一步封装了jdbc。不管是Spring jdbc还是各种ORM框架(Hibernate、iBatis、MyBatis),它们都对JDBC做了进一步的封装,使数据访问层的操作更加灵活、易用。当然,它们也各有各的优缺点,在项目技术选型时非常重要的一项。同时,Spring还可以集成第三方的框架。

 

2、ORM

      Spring提供了对ORM框架的支持,能够集成大多主流的ORM框架。JPA是一个java持久化注解的规范,Hibernate是一种对JPA的实现。TopLink是Oracle的一个ORM框架;JDO是sun公司的一个规范。OJB是appach的。IBatis不是严格意义上的ORM,ORM一般是对云数据的映射,描述类和属性,它是基于SQL的映射器。由于ORM框架层出不穷,种类繁多,大家可以自行查一下它们是哪个公司的产品,以及各自优缺点等等。

 

3、Web

       Spring不仅具有自己的表示层SpringMVC,同上面一样,它还也可以支持第三方的表示层框架struts,webwork,以及一些第三方的工具。

 

        下面我们搭建一个Spring的添加用户的开发环境:

1.下载springFramework,我使用的是spring3.4.0的版本,然后在eclipse中安装插件, 点击help->Install New Software

2.新建一个Java工程,新建一个lib文件夹,放入所需的jar包

3.提供Spring配置文件applicationContext.xml。

4.编写代码

Main类

public class Main {

	public static void main(String[] args) {
		//1.创建spring容器的IOC对象
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		//2.从容器中获取Bean实例
		Person person = (Person) ctx.getBean("person");
		System.out.println(person);
	}
}
Person类

public class Person {

    private String name;
	
	private int age;
	
	private List<Car> cars;

	public void setName(String name) {
		this.name = name;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public void setCars(List<Car> cars) {
		this.cars = cars;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]";
	}
	
	
}
Car类

public class Car {
	
	private String brand;
	private String crop;
	private int price;
	private int maxSpeed;
	public Car(String brand, String crop, int price) {
		super();
		this.brand = brand;
		this.crop = crop;
		this.price = price;
	}
	@Override
	public String toString() {
		return "Car [brand=" + brand + ", crop=" + crop + ", price=" + price
				+ ", maxSpeed=" + maxSpeed + "]";
	}
	
	
}

Spirng的配置文件:applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd">

	<!-- 配置bean 属性注入
	class:bean的全类名,通过反射的方式在IOC容器中创建Bean实例,所以必须要有无参构造器
	id:表示容器中的bean.bean的唯一标识符
	-->
	<bean id="helloworld" class="com.atguigu.spring.beans.Person">
		<property name="name" value="spring"></property>
	</bean>
	<!-- 通过构造器的方法配置bean -->
	<bean id="car1" class="com.atguigu.spring.beans.Car">
		<constructor-arg value="Audi"></constructor-arg>
		<constructor-arg value="gaochao"></constructor-arg>
		<constructor-arg value="20"></constructor-arg>
	</bean>
	
	<bean id="car2" class="com.atguigu.spring.beans.Car">
		<constructor-arg value="ford"></constructor-arg>
		<constructor-arg value="gaochao"></constructor-arg>
		<constructor-arg value="30"></constructor-arg>
	</bean>
	<bean id="car3" class="com.atguigu.spring.beans.Car">
		<constructor-arg value="benchi"></constructor-arg>
		<constructor-arg value="gaochao"></constructor-arg>
		<constructor-arg value="40"></constructor-arg>
	</bean>
	<!-- 通过id建立bean之间的引用关系 
	<bean id="student" class="com.atguigu.spring.beans.Student">
		<property name="name" value="tom"></property>
		<property name="age" value="23"></property>
		<property name="car" ref="car2"></property>
	</bean> 
	-->
	<!-- 测试如何配置集合属性 -->
	<bean id="person" class="com.atguigu.beans.collection.Person">
		<property name="name" value="Tom"></property>
		<property name="age" value="34"></property>
		<property name="cars">
			<list>
				<ref bean="car1"/>
				<ref bean="car2"/>
				<ref bean="car3"/>
			</list>
		</property>
	
	</bean>
</beans>
控制台输出:


总结

 

      最后,今天先介绍这么多,我们对于Spring的认识才刚刚开始,仅是冰山一角。对于Spring,我更喜欢用下面的八个字形容:海纳百川,有容乃大。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值