1、Spring简介及IOC入门案例

一、Spring框架介绍

1、介绍

  Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

2、Spring是什么?

  • Spring是一个开源框架,它是为了解决企业应用开发的复杂性而创建的。
  • Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
  • 轻量——从大小与开销两方面而言Spring都是轻量的。
  • 控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。
  • 面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。
  • 框架——Spring可以将简单的组件配置、组合成为复杂的应用。

3、Spring的体系结构

  1. 核心容器(Core Container)
  2. 数据访问/集成(Data Access/Integration)层
  3. Web层
  4. AOP(Aspect Oriented Programming)模块
  5. 植入(Instrumentation)模块
  6. 消息传输(Messaging)
  7. 测试(Test)模块

4、Spring的优点

  1. 低侵入式设计,代码的污染极低;
  2. 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺;
  3. Spring的IoC容器降低了业务对象替换的复杂性,提高了组件之间的解耦
  4. Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用;
  5. Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问;
  6. spring的高度开放性,并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部。

二、Spring核心——控制反转(IOC)

1、控制反转IOC

  • IoC(Inversion Of Control)控制反转,Spring反向控制应用程序所需要使用的外部资源。
  • Spring控制的资源全部放置在Spring容器中,该容器称为IoC容器。

举例:我们创建对象需要通过Person p = new Person创建对象.

Spring是个容器,我们创建对象过程只需要交给Spring就行,在我们用到对象时,spring容器已经帮我们创建好了,直接拿就好,这样做的目的是解耦。

2、耦合与内聚

  • 耦合(Coupling):代码书写过程中所使用技术的结合紧密度,用于衡量软件中各个模块之间的互联程度
  • 内聚(Cohesion):代码书写过程中单个模块内部各组成部分间的联系,用于衡量软件中各个功能模块内部的功能联系
    • 程序书写的目标:高内聚,低耦合
    • 就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依存度却不要那么紧密

3、Spring-IOC入门案例

3.1、 导入相关依赖(5.2.4.RELEASE)

<dependency>
	<groupId>org.springframework</groupId>
	<artifactId>spring-context</artifactId>
	<version>5.2.4.RELEASE</version>
</dependency>
3.2、 编写业务层和控制层代码

UserService

package com.why.service;

/**
 * @author Laity
 * @date 2021年11月16日 9:31
 */

public interface UserService {
    void saveUser();
}

UserServiceImpl

package com.why.service.impl;
import com.why.service.UserService;

public class UserServiceImpl implements UserService {

    @Override
    public void saveUser() {
        System.out.println("Hello,Spring............");
    }
}

3.3、 建立配置文件

    在resources建立Spring的配置文件(名字自定义)--------spring.xml

3.4、 配置所需资源(Service)为spring控制的资源

spring.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">

    <!--
            id:      bean对象的id,唯一标识。一般是Bean对象的名称的首字母小写。
            class:   bean对象的类路径。
    -->
    <bean id="userService" class="com.why.service.impl.UserServiceImpl"/>

</beans>

3.5、 表现层(UserController)通过spring获取资源(Service实例)

UserController

package com.why.controller;

import com.why.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author Laity
 * @date 2021年11月16日 9:41
 */
public class UserController {
    public static void main(String[] args) {

        //获取Spring上下文环境 (加载配置文件)
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

        /*
              通过getBean方法得到Spring容器中实例化好的Bean对象 (实例化Bean对象)
              userService代表的是配置文件中bean标签的id属性值(id标识唯一的bean)
         */
        UserService userService = (UserService) context.getBean("userService");
        userService.saveUser();
    }
}

3.6、 运行结果


结果打印出来,证明Spring为我们创建了对象,我们直接拿就可以。

3.7、 Spring配置文件加载

  文件在resources目录下为例:

  • 根据相对路径加载配置文件
//自动在当前项目下resource目录下找spring.xml配置文件
ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");

 - 根据绝对路径加载配置文件

//在电脑磁盘找到并加载配置文件
ApplicationContext ac = new FileSystemXmlApplicationContext("E:\Blog\Spring\Spring-web\src\main\resources\spring.xml");

3.8、 Spring多配置文件加载

  在resources下创建两个service.xml,dao.xml

service.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">

    <bean id="userService" class="com.why.service.impl.UserServiceImpl"/>

</beans>

dao.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">

    <bean id="userDao" class="com.why.dao.UserDao"/>

</beans>

 1. 根据相对路径加载多个配置文件

	//配置文件之间用英文的逗号隔开
  ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml","service.xml","dao.xml");

 2. 可以通过总配置文件import其他的配置文件

spring.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
        https://www.springframework.org/schema/beans/spring-beans.xsd">
		<!--利用import标签进行导入-->
    <import resource="service.xml"></import>
    <import resource="dao.xml"></import>
</beans>

 3. 然后根据相对路径加载spring.xml配置文件即可

 ApplicationContext ac=new ClassPathXmlApplicationContext("spring.xml");

Spring的IOC配置入门案例就写到这里

posted @ 2021-11-16 10:17  不起眼的程序员  阅读(80)  评论(0编辑  收藏  举报