【Spring】Sring基础概念(黑马SSM学习笔记) 1

简介: 【Spring】Sring基础概念(黑马SSM学习笔记)

目录

Spring简介


Spring是什么

Spring是分层的Java SE/EE应用的full-stack轻量级开源框架,以Ioc(Inverse Of Control:反转控制)和AOP(Aspect Oriented Programming:面向切面编程)为内核

提供了展现层SpringMVC和持久层Spring JDBCTemplate以及业务层事务管理等众多的应用技术,还能整合开源世界众多注明的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开发框架

Spring发展

……

Spring优势

  1. 方便解耦,简化开发
    通过Spring提供的Ioc容器,可以将对象间的依赖关系交由Spring控制,避免硬编码造成的过渡耦合。
    用户不必为单例模式类,属性文件解析等底层需求编写代码,可以更加专注于上层的应用
  2. AOP编程支持
    通过Spring的AOP功能,方便面向切面编程,许多不容易用传统OOP实现的功能可以通过AOP实现
  3. 声明式事务的支持
    通过声明式方式灵活的进行事务管理,提高开发效率和质量。将开发者从单调烦闷的事务管理代码中解脱出来
  4. 方便程序测试
    可以使用非容器依赖的编程方式进行几乎所有的测试工作。
  5. 方便集成各种优秀框架
    Struts、Hibernate、Hessian、Quartz
  6. 降低Java EE API 的使用难度
    Spring对Java EE API(例如JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使用这些API使用难度大大减低
  7. Java源码经典学习典范
    Spring源代码设计巧妙,结构清晰,匠心独用……

Spring体系结构

q1.png

Core Container :核心容器

Spring快速入门


Spring程序开发步骤

不用Spring的一般步骤

cc.mllt.service.UserServicelmpI

UserDao userDao = new UserDaoImpI(

cc.mllt.dao.UserDaoImpI

save方法
update方法
……

xml配置文件

id标识 = cc.mllt.dao.UserDaoImpI

使用Spring框架

cc.mllt.service.UserServicelmpI

UserDao userDao = Spring客户端.getBean(id标识)

cc.mllt.dao.UserDaoImpI

save方法
update方法
……

xml配置文件

id标识 = cc.mllt.dao.UserDaoImpI

Spring框架

读取xml文件
根据id标识获取bean全限定名
通过反射创建Bean对象
返回对象

图示

q2.jpg

总结

  • 导入Spring开发的基本包坐标
  • 编写Dao接口和实现类
  • 创建Spring核心配置文件
  • 在Spring配置文件中配置UserDaoImpI
  • 使用Spring的API获得Bean实例

实战

项目文件:黑马程序员SSM框架教程\edu01\Demo1

创建项目

q3.png

添加Spring框架

在pom.xml文件中添加以下内容

<!--Spring Framework-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.0.5.RELEASE</version>
    </dependency>

q4.png

编写接口方法

在创建出来的UserDao中简单的写一个方法

public interface UserDao {
    public void save();
}

q5.png

实例化接口

q6.png

w1.png

创建完成目录结构如下

w2.png

在新建的这个UserDaoImpl文件中写入以下内容

public class UserDaoImpl implements UserDao {
    public void save(){
        System.out.println("[萌狼蓝天]save running....");
    }
}

w3.png

创建配置文件

q1.png

q2.png

q3.png

q4.png

配置完成

编写测试代码

q5.png

写入如下代码

package cc.mllt.dao.demo;
import cc.mllt.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserDaoDemo {
    public static void main(String[] args) {
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 获取xml文件
        UserDao userDao = (UserDao) app.getBean("userDao");
        // ① app.getBean("userDao")里面写的是刚才xml文件里面配置的bean的id名称
        // ② 将Objec类型强制转换为UserDao类型
        userDao.save();
    }
}

q6.png

知识小结

Spring开发步骤

  1. 导入坐标
  2. 创建bean
  3. 创建applicationContext.xml(这个名称可以自定义)
  4. 在配置文件中进行配置
  5. 创建ApplicationContext对象getBean

Spring配置文件


bean标签基本配置

q1.png

用于配置对象交由Spring创建,默认情况下它调用的是类中的无参构造函数,如果没有无参构造函数则不能成功创建

基本属性

  • id:Bean实例在Spring容器中的唯一标识
  • class:Bean的全限定名称

bean标签范围配置

scope:指的是对象的作用范围,取值如下:

取值范围 说明
singleton 默认值,单例的。(单对象)
prototype 多例的。(多对象)
request WEB项目中,Spring创建一个Bean对象,将对象放入到request域中
session WEB项目中,Spring创建一个Bean对象,将对象放入到session域中
global session WEB项目中,应用在Portlet环境,如果没有Portlet环境那么globalSession相当于session

测试scope

本测试基于项目 黑马程序员SSM框架教程\edu01\Demo1

<bean id="userDao" class="cc.mllt.dao.impl.UserDaoImpl" scope="singleton"/>

q2.png

添加单元测试包

在pom.xml中添加如下代码

<!--junit-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>

q3.png

测试scope

q4.png

@Test
    //测试scope属性
    public  void test1(){
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao1 = (UserDao) app.getBean("userDao");
        UserDao userDao2 = (UserDao) app.getBean("userDao");
        System.out.println(userDao1);
        System.out.println(userDao2);
    }

q5.png

q6.png

w1.png

观察结果发现,是一样的,说明在容器中只存在一个

回到applicationContext.xml中,更改scope属性值

<bean id="userDao" class="cc.mllt.dao.impl.UserDaoImpl" scope="prototype"/>

w2.png

继续测试

w3.png

q1.png

观察结果发现,输出的结果不一致(地址不一样)。

说明容器中存在的UserDao不止一个

测试bean的创建时机、

测试

回到applicationContext.xml中,更改scope属性值

<bean id="userDao" class="cc.mllt.dao.impl.UserDaoImpl" scope="singleton"/>

q2.png

q3.png

q4.png

q5.png

q6.png

回到applicationContext.xml中,更改scope属性值

<bean id="userDao" class="cc.mllt.dao.impl.UserDaoImpl" scope="prototype"/>

再进行测试

w1.png

总结
1)当scope的取值为singleton时

Bean的实例化个数: 1个

Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例

Bean的生命周期:

●对象创建: 当应用加载,创建容器时,对象就被创建了

●对象运行: 只要容器在,对象一直活着

●对象销毁: 当应用卸载,销毁容器时,对象就被销毁了

2)当scope的取值为prototype时

Bean的实例化个数:多个

Bean的实例化时机:当调用getBean0方法时实例化Bean

●对象创建: 当使用对象时,创建新的对象实例

●对象运行: 只要对象在使用中,就一-直活着

●对象销毁: 当对象长时间不用时,被Java的垃圾回收器回收了

Bean的生命周期

init-method:指定类中的初始化方法名称

destroy-method:指定类中销毁方法的名称

w2.png

public void ml_init(){
        System.out.println("[萌狼蓝天]]UserDaoImpl-初始化方法");
    }
    public void ml_destroy(){
        System.out.println("[萌狼蓝天]UserDaoImpl-销毁方法");
    }

目前这两个方法没有被使用

为了能让这两个方法被使用,现在去修改配置文件applicationContext.xml

<bean id="userDao" class="cc.mllt.dao.impl.UserDaoImpl" scope="prototype" init-method="ml_init" destroy-method="ml_destroy"/>

回到测试代码

w3.png

<?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="cc.mllt.dao.impl.UserDaoImpl" scope="singleton" init-method="ml_init" destroy-method="ml_destroy"/>
</beans>

q1.png

为什么没有销毁?

因为这是一个单元测试,并没有在Tomcat服务器内部

单元测试一执行完毕就会销毁,没有来得及执行销毁方法中的打印内容

那怎么样测试呢?将容器设置为手动关闭!

相关文章
|
8月前
|
搜索推荐 JavaScript Java
基于springboot的儿童家长教育能力提升学习系统
本系统聚焦儿童家长教育能力提升,针对家庭教育中理念混乱、时间不足、个性化服务缺失等问题,构建科学、系统、个性化的在线学习平台。融合Spring Boot、Vue等先进技术,整合优质教育资源,提供高效便捷的学习路径,助力家长掌握科学育儿方法,促进儿童全面健康发展,推动家庭和谐与社会进步。
|
监控 Java 应用服务中间件
微服务——SpringBoot使用归纳——为什么学习Spring Boot
本文主要探讨为什么学习Spring Boot。从Spring官方定位来看,Spring Boot旨在快速启动和运行项目,简化配置与编码。其优点包括:1) 良好的基因,继承了Spring框架的优点;2) 简化编码,通过starter依赖减少手动配置;3) 简化配置,采用Java Config方式替代繁琐的XML配置;4) 简化部署,内嵌Tomcat支持一键式启动;5) 简化监控,提供运行期性能参数获取功能。此外,从未来发展趋势看,微服务架构逐渐成为主流,而Spring Boot作为官方推荐技术,与Spring Cloud配合使用,将成为未来发展的重要方向。
556 0
微服务——SpringBoot使用归纳——为什么学习Spring Boot
|
12月前
|
安全 Java 数据库
Spring Boot 框架深入学习示例教程详解
本教程深入讲解Spring Boot框架,先介绍其基础概念与优势,如自动配置、独立运行等。通过搭建项目、配置数据库等步骤展示技术方案,并结合RESTful API开发实例帮助学习。内容涵盖环境搭建、核心组件应用(Spring MVC、Spring Data JPA、Spring Security)及示例项目——在线书店系统,助你掌握Spring Boot开发全流程。代码资源可从[链接](https://pan.quark.cn/s/14fcf913bae6)获取。
1951 3
|
Java Spring
Spring框架的学习与应用
总的来说,Spring框架是Java开发中的一把强大的工具。通过理解其核心概念,通过实践来学习和掌握,你可以充分利用Spring框架的强大功能,提高你的开发效率和代码质量。
308 20
|
前端开发 Java 数据库连接
Spring MVC 扩展和SSM框架整合
通过以上步骤,我们可以将Spring MVC扩展并整合到SSM框架中。这个过程包括配置Spring MVC和Spring的核心配置文件,创建控制器、服务层和MyBatis的Mapper接口及映射文件。在实际开发中,可以根据具体业务需求进行进一步的扩展和优化,以构建更加灵活和高效的企业级应用程序。
338 5
|
XML Java 开发者
Spring底层架构核心概念解析
理解 Spring 框架的核心概念对于开发和维护 Spring 应用程序至关重要。IOC 和 AOP 是其两个关键特性,通过依赖注入和面向切面编程实现了高效的模块化和松耦合设计。Spring 容器管理着 Beans 的生命周期和配置,而核心模块为各种应用场景提供了丰富的功能支持。通过全面掌握这些核心概念,开发者可以更加高效地利用 Spring 框架开发企业级应用。
476 18
|
Java Maven Spring
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
这篇文章介绍了在IntelliJ IDEA社区版中创建Spring Boot项目的三种方法,特别强调了第三种方法的详细步骤。
16720 0
springboot学习一:idea社区版本创建springboot项目的三种方式(第三种为主)
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
581 9
|
前端开发 Java 数据库
SpringBoot学习
【10月更文挑战第7天】Spring学习
299 9
|
XML Java 数据格式
Spring学习
【10月更文挑战第6天】Spring学习
183 1

热门文章

最新文章