Spring学习(一)

一、Spring框架

1.1Spring框架概述

Spring 是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。

Spring是于2003 年兴起的一个轻量级的Java 开发框架,由RodJohnson创建,由其著作Expert One-On-One J2EEDevelopment and Design中阐述的部分理念和原型衍生而来。

它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。

Spring 的核心是控制反转(IoC控制反转)和面向切面(AOP)。简单来说,Spring 是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。

1.2Spring框架优点

1.方便解耦,简化开发,Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理。IOC的作用。

2.AOP 编程的支持,Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。(可扩展性)

3.声明式事务的支持,只需要通过配置就可以完成对事务的管理,而无需手动编程。

4.方便程序的测试,Spring对Junit4支持,可以通过注解方便的测试Spring程序。

5.方便集成各种优秀框架,Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts2、Hibernate、MyBatis、Quartz 等)的直接支持。

6.降低JavaEE API 的使用难度,Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

二、Spring的IOC核心技术

2.1什么是IOC

控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。

将对象的创建权力反转给Spring框架!!

传统方式:你 new 对象 → 你控制

Spring 方式:你定义类,Spring 创建对象 → Spring 控制

2.2IOC的程序入门

2.2.1创建Java工程,导入坐标依赖
java 复制代码
<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>
2.2.2编写接口和实现类,编写具体的实现方法
java 复制代码
package com.qcby.service;

public interface UserService {

    public void hello();

}
java 复制代码
package com.qcby.service;

public class UserServiceImpl implements UserService {
    @Override
    public void hello() {
        System.out.println("HelloIOC!!");
    }
}
2.2.3编写Spring核心的配置文件,在src目录下创建applicationContext.xml的配置文件,名称是可以任意的,但是一般都会使用默认名称。
java 复制代码
<?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">
    
    <!-- IOC管理bean -->
    <bean id="userService" class="com.qcby.service.UserServiceImpl" />

</beans>
2.2.4编写测试方法。
java 复制代码
package com.qcby.test;

import com.qcby.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Demo1 {

    /**
     * 入门程序
     */
    @Test
    public void run1() {
        // 使用Spring的工厂
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 通过工厂获得类
        UserService userService = (UserService) applicationContext.getBean("userService");
        userService.hello();
    }

}

2.3IOC技术总结

ApplicationContext接口,工厂的接口,使用该接口可以获取到具体的Bean对象。

该接口下有两个具体的实现类。

ClassPathXmlApplicationContext,加载类路径下的Spring配置文件。 FileSystemXmlApplicationContext,加载本地磁盘下的Spring配置文件。

2.4Spring框架的Bean管理的配置文件方式

id 属性,给Bean起个名字,在约束中采用ID的约束,唯一,取值要求:必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号,id:不能出现特殊字符。

class 属性,Bean 对象的全路径。

scope 属性,scope属性代表Bean的作用范围。 ​

singleton 单例(默认值),最常用的方式。 ​

prototype 多例 ​

request 应用在Web项目中,每次HTTP请求都会创建一个新的Bean ​

session 应用在Web项目中,同一个HTTP Session共享一个Bean

init-method,当 bean被载入到容器的时候调用init-method属性指定的方法

destroy-method,当 bean从容器中删除的时候调用destroy-method属性指定的方法

java 复制代码
<bean id="userService" class="com.qcby.service.UserServiceImpl" scope="prototype" init-method="init" destroy-method="destroy">

2.5实例化Bean对象的三种方式

默认是无参数的构造方法(默认方式,基本上使用)

java 复制代码
<bean id="us" class="com.qcby.service.UserServiceImpl" />

静态工厂实例化方式

java 复制代码
<bean id="us" class="com.qcby.demo.StaticFactory" factory-method="createUs" />
java 复制代码
package com.qcby.demo;

import com.qcby.service.UserService;
import com.qcby.service.UserServiceImpl;

/**
 * 静态工厂方式
 */
public class StaticFactory {

    // 静态工厂方式
    public static UserService createUs() {
        System.out.println("通过静态工厂的方式创建UserServiceImpl对象...");
        // 编写很多业务逻辑 权限校验
        return new UserServiceImpl();
    }

}

实例工厂实例化方式

java 复制代码
<bean id="dfactory" class="com.qcby.demo.Dfactory" />
<bean id="us" factory-bean="dfactory" factory-method="createUs" />
java 复制代码
package com.qcby.demo;

import com.qcby.service.UserService;
import com.qcby.service.UserServiceImpl;

/**
 * 动态工厂方式
 */
public class Dfactory {

    public UserService createUs() {
        System.out.println("实例化工厂的方式...");
        return new UserServiceImpl();
    }

}
相关推荐
破芽12 分钟前
learn-claude-code-s05-s11-学习笔记
笔记·学习
pipixia2003313 分钟前
C++ 面试高频:namespace 的 6 个知识点,从 using 到匿名命名空间
c语言·学习·算法·嵌入式·命名空间·c++面试·匿名命名空间
念何架构之路25 分钟前
Go reflect 包:结构体反射 —Field、Tag 与 VisibleFields
java·数据库·golang
每天题库35 分钟前
汽车维修工等级考试题库 理论实操核心考点一次梳理清
学习·安全·考试·题库·考证
liangbo743 分钟前
03-JDK 10/11 局部变量推断与 LTS:var 到底该怎么用
java
神也畏惧菠萝1 小时前
想要学习Agent应用开发?:2026 AI Agent开发全栈通关路线
学习·langgraph·mcp协议·agent开发·rag架构·prompt高级工程
Percep_gan1 小时前
调用天翼云的对象存储ZOS,很详细
java·1024程序员节
若亦_2 小时前
数据结构>>优先级队列(堆)
java·数据结构
程序猿乐锅2 小时前
【从0-1学习Python | 第七篇】Python 面向对象基础
开发语言·笔记·后端·python·学习·1024程序员节
Wang's Blog2 小时前
Java 项目实战: 交友项目 - 查询圈子个人动态:查询我的动态需求分析
java·开发语言·交友