• Spring基础


    一、概述

    Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。

    根据功能的不同,可以将一个系统中的代码分为 主业务逻辑 与 系统级业务逻辑 两类。它们各自具有鲜明的特点:主业务代码间逻辑联系紧密,有具体的专业业务应用场景,复用性相对较低;系统级业务相对功能独立,没有具体的专业业务应用场景,主要是为主业务提供系统级服务,如日志、安全、事务等,复用性强。

    Spring 根据代码的功能特点,将降低耦合度的方式分为了两类:IoC 与 AOP。IoC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring 容器统一管理,自动“注入”。而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务“混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。

    Spring 是于 2003 年兴起的一个轻量级的 Java 开发框架,它是为了解决企业应用开发的复杂性而创建的。Spring 的核心是控制反转(IoC)和面向切面编程(AOP)。简单来说,Spring 是一个分层的 Java SE/EE full-stack(一站式)轻量级开源框架。

    二、体系结构

    说明:每一个黑色的方块都表示一个Jar包,Spring需要依赖于Core Container(基础)中的Jar包 。

    三、Spring与IoC

    控制反转(IoC,Inversion of Control),是一个概念,是一种思想。指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。

    IoC 是一个概念,是一种思想,其实现方式多种多样。当前比较流行的实现方式有两种: 依赖注入和依赖查找。依赖注入方式应用更为广泛。

    • 依赖查找:Dependency Lookup,DL,容器提供回调接口和上下文环境给组件,程序代码则需要提供具体的查找方式。比较典型的是依赖于 JNDI 系统的查找。
    • **依赖注入:**Dependency Injection,DI,程序代码不做定位查询,这些工作由容器自行完成。

    依赖注入 DI 是指程序运行过程中,若需要调用另一个对象协助时,无须在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序。

    Spring 的依赖注入对调用者与被调用者几乎没有任何要求,完全支持 POJO 之间依赖关系的管理。

    依赖注入是目前最优秀的解耦方式。依赖注入让 Spring 的 Bean 之间以配置文件的方式组织在一起,而不是以硬编码的方式耦合在一起的。

    四、第一个Spring程序

    1.新建项目,在pom.xml中添加依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.uos</groupId>
        <artifactId>hello-spring</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>4.3.17.RELEASE</version>
            </dependency>
        </dependencies>
    
    </project>
    pom.xml

    2.创建接口和实现

    package com.uos.hello.spring.service;
    
    
    public interface UserService {
        public void say();
    }
    package com.uos.hello.spring.service.impl;
    
    import com.uos.hello.spring.service.UserService;
    
    
    public class UserServiceImpl implements UserService {
        public void say() {
            System.out.println("Hello Spring!");
        }
    }
    

    3.创建Spring配置文件

    <?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.uos.hello.spring.service.impl.UserServiceImpl"></bean>
    </beans>

    4.创建测试类

    package com.uos.hello.spring;
    
    import com.uos.hello.spring.service.UserService;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    
    /**
     * 测试类
     */
    public class MyTest {
        public static void main(String[] args) {
         //获取Spring容器  ApplicationContext applicationContext
    = new ClassPathXmlApplicationContext("spring-context.xml");
         //从Spring容器中获取对象 UserService userService
    = (UserService) applicationContext.getBean("userService"
    ); userService.say(); } }
  • 相关阅读:
    Linux C语言错误处理
    [精彩] 关于LAN上有两个相同MAC地址的问题
    毕业一年 写给自己的警戒书
    原始套接字简单应用
    李彦宏建言创业者:准备失败 勇于创新 专注如一
    Java programming problem in linux box: Exception in thread "main" java.lang.NoClassDefFoundError
    Java新手必看之Hello World 攻略
    Android 开发简介
    libnet应用之arp包发送
    TCP/IP协议族之运输层(TCP流量控制和拥塞控制 [2])
  • 原文地址:https://www.cnblogs.com/my-program-life/p/11876308.html
Copyright © 2020-2023  润新知