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

spring4和spring5组件扫描区别 spring4与spring5区别_xml

一.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包。

spring4和spring5组件扫描区别 spring4与spring5区别_xml_02

(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();
	}