Spring简介
Spring是一个应用程序级别的轻量级框架,对企业级开发提供“一站式”服务。sping是一个开源的框架。程序下载站点:http://spring.io/projects/spring-framework
什么是轻量级框架?
轻量级框架是和重量级框架(如:EJB)比较而言的,spring框架的核心包大概1M左右。
什么是容器?
容器可以装载对象、实例化对象和配置对象之间的依赖关系。
IOC/DI?
IOC:IOC的全称是inversion of control(控制反转)是指程序之间的依赖关系由依赖具体实现,变为依赖抽象接口。依赖抽象非具体!
DI:DI的全称是dependence injection(依赖注入)是指程序之间的依赖关系由容器动态注入,而非硬编码实现。Spring里面的所有类都叫java bean,类和类之间的依赖关系都写到配置文件里面去,比如spring里面的所有的bean比作是项链的每一个珠子,而配置文件可比作是串起来每个珠子的线。
AOP?
AOP全称是aspect oriented programming(面向切面编程)是指程序的某一方面独立出来,单独设计。如:事务、日志、权限等。而OOP面向对象编程。
IOC容器?
在spring中最核心的思想是实现IOC容器,spring的大部分功能都是基于IOC容器的。
AOP实现?
除了IOC之外,Spring中最抢眼的是AOP实现了,在spring中提供了三种对AOP编程技术的实现:
1.对持久层的支持
Spring对持久层做了良好的支持,(封装了JDBC的操作,集成流行的ORM技术框架hibernate、iBATIS、mybatis,EclipseLink,JFinal、JDO)
2.对web层支持
a.Spring MVC
b.对其他框架的集成(Struts、webwork)
3.对其他框架和技术的集成
RMI 和webservice
EJB
JavaMail
定时任务和调度
一、Spring例子初步
1.新建web项目,然后通过properties传递name参数
properties文件是在src目录下创建file文件,命名Name.properties即可。该例子的思想就是通过加载配置文件达到任意修改properties文件的目的。
新建HelloWorld类
1 package com.feimao.test;
2
3 public class HelloWorld {
4 private String name;
5 public String getName(){
6 return this.name;
7 }
8 public void setName(String name) {
9 this.name = name;
10 }
11 public String hello(){
12 return "hello , " + name;
13 }
14 }
创建Tester类
1 public static void main(String[] args){
2
3 HelloWorld hw = new HelloWorld();
4
5 String name = " ";
6
7 Properties prop = new Properties();
8
9 try {
10
11 prop.load(Tester.class.getClassLoader().getResourceAsStream("Name.properties"));
12
13 name = prop.getProperty("name");
14
15 } catch (IOException e) {
16
17 e.printStackTrace();
18
19 }
20
21 hw.setName(name);
22
23 System.out.println(hw.hello());
24
25 }
26
27 }
properties文件构造
1 name=feimao
二、Spring版本重写下上面的例子
1.添加jar包,用了spring的两个核心jar包,一个是spring.jar,一个是日志commons-logging-1.2.jar。
2.创建配置文件,目的是声明javabean,主要是通过xml的配置文件,配置beans中的id、class和其属性property
3.获得bean工厂,然后通过容器实例,加载读取beans.xml
4.测试
创建beans.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE beans PUBLIC "_//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"
3 >
4 <beans>
5 <bean id = "hw" class = "com.feimao.test.HelloWorld">
6 <property name = "name" value = "feimao"/>
7 </bean>
8
9 </beans>
构造Spring版本的测试类
1 package com.feimao.test;
2
3 import org.springframework.beans.factory.BeanFactory;
4 import org.springframework.beans.factory.xml.XmlBeanFactory;
5 import org.springframework.core.io.ClassPathResource;
6 import org.springframework.core.io.Resource;
7
8 public class Tester {
9 public static void main(String[] args){
10 Resource r = new ClassPathResource("beans.xml");//读取配置文件
11 BeanFactory factory = new XmlBeanFactory(r);//创建工厂,创建bean,获得工厂
12 HelloWorld hw = (HelloWorld)factory.getBean("hw");//通过getBean方法由beans.xml中的id,获得class类。同时返回object类型需要强制转换
13 System.out.println(hw.hello());
14 }
15 }
三、演示USB 接口、移动硬盘、U 盘和计算机之间的依赖关系,以便更好的理解依赖注入和控制反转的思想。
依赖注入最常用的方式:
设置注入和构造方法注入
创建USB接口
1 package com.feimao.test;
2
3 public interface USB {
4 public void read();
5 public void write();
6
7 }
创建硬盘的类并实现USB接口
1 package com.feimao.test;
2
3 public class UDisk implements USB{
4 @Override
5 public void read() {
6 System.out.println("from UDisk read!");
7 }
8 public void write() {
9 System.out.println("to UDisk write!");
10 }
11 }
创建移动硬盘的类并实现USB接口
1 package com.feimao.test;
2
3 public class MoveDisk implements USB {
4 @Override
5 public void read() {
6 System.out.println("from MoveDisk read!");
7 }
8
9 public void write() {
10 System.out.println("from MoveDisk read!");
11 }
12 }
创建电脑类并依赖USB接口
1 package com.feimao.test;
2
3 public class Computer {
4 private USB usb;
5 public USB getUsb() {
6 return usb;
7 }
8 public void setUsb(USB usb){
9 this.usb = usb;
10 }
11 public void test(){
12 usb.read();
13 usb.write();
14 }
15 }
Tseter类中添加Computer getBean方法
1 public class Tester {
2 public static void main(String[] args){
3 Resource r = new ClassPathResource("beans.xml");//读取配置文件
4 BeanFactory factory = new XmlBeanFactory(r);//创建工厂,创建bean,获得工厂
5 /*HelloWorld hw = (HelloWorld)factory.getBean("hw");//通过getBean方法由beans.xml中的id,获得class类。同时返回object类型需要强制转换
6 System.out.println(hw.hello());*/
7 Computer c = (Computer) factory.getBean("c") ;
8 c.test();
9 }
10 }
在beans.xml文件中添加新的bean
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE beans PUBLIC "_//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"
3 >
4 <beans>
5 <bean id = "hw" class = "com.feimao.test.HelloWorld">
6 <property name = "name" value = "feimao"/>
7 </bean>
8 <bean id = "uDisk" class = "com.feimao.test.UDisk"/>
9 <bean id = "moveDisk" class = "com.feimao.test.MoveDisk"/>
10 <bean id = "c" class = "com.feimao.test.Computer">
11 <property name = "usb" ref = "uDisk"/>
12 </bean>
13
14 </beans>