Struts2,Hibernate,Spring这三个框架的关系。

一.Spring4概述
降低代码间的耦合度(关联性,相互依赖性)。根据功能的不同,可以分为主业务逻辑和系统级业务逻辑。
Spring的核心是控制反转(loC)和面向切面编程(AOP)。就是用这两种方式降低耦合度,IoC降低的是主业务逻辑之间的耦合度,AOP降低的是主业务逻辑和系统级业务逻辑之间的耦合度。
Spring是一个容器。
1.1 Spring的特点
非侵入式:Spring框架的API不会在业务逻辑上出现,及业务逻辑是POJO。
1.2 容器
Spring作为一个容器,可以管理对象的生命周期,对象与对象之间的依赖关系。
1.3 IoC(Inversion of Control)
即创建被调用者的实例不是由调用者完成,而是由Spring容器完成,并注入调用者。
1.4 AOP
是面向对象编程OOP的补充。换个通俗点的例子来说,把主业务看成一本书,系统级业务是这本书之外的一张纸,如果此时需要这个系统级业务,则把这张纸直接插入书中,不需要时抽出来就行。插入和抽出这张纸对于这本书并没有影响,反而增加了另外的功能。
二 .Spring和IoC
控制反转,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对象控制权的转移,从程序代码本身反转到了外部容器。
实现方式有两种:
依赖查找(DL)
依赖注入(DI)
第一个程序:
(1)创建一个java工程,导入jar包。

(2)创建实体类,即bean,
(3)创建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"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 注册Service对象:等同于Java代码中的ISomeService service=new SomeServiceImpl()语句
这个对象是在Spring容器被初始化时创建的
-->
<bean id="someService" class="com.sss.SomeServiceImpl"></bean>
</beans>(4)创建单元测试类,下面有三种方法,最常用的是第一种。
@Test
public void test2(){
// 加载Spring配置文件,创建Spring容器对象
// 这里的配置文件存放在类路径src下
// 这个对象是在Spring容器被初始化时创建的
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
// 从容器中获取指定Bean对象
ISomeService service=(ISomeService)ac.getBean("someService");
// ISomeService service=new SomeServiceImpl();
service.doFirst();
service.doSecond();
}
@Test
public void test3(){
// 加载Spring配置文件,创建Spring容器对象
// 这里的配置文件存放在项目(25-Spring)的根下
ApplicationContext ac=new FileSystemXmlApplicationContext("applicationContext.xml");
// 从容器中获取指定Bean对象
ISomeService service=(ISomeService)ac.getBean("someService");
// ISomeService service=new SomeServiceImpl();
service.doFirst();
service.doSecond();
}@Test
public void test5(){
// 这个容器中的对象不是在容器初始化时创建的,而是在真正使用时才创建
BeanFactory bf=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
// 从容器中获取指定Bean对象
ISomeService service=(ISomeService)bf.getBean("someService");
service.doFirst();
service.doSecond();
}
















