Spring | Spring框架最基本核心的jar包、Spring的入门程序、依赖注入

目录:

    • 1.Spring框架最基本、最核心的jar包
    • 2.Spring的入门程序
    • 3.依赖注入
      • 3.1 依赖注入的概念
      • 3.2 依赖注入的实现方式 (基于 属性 + set方法 + xml配置文件 的实现方式)

1.Spring框架最基本、最核心的jar包

Spring是一个轻量级框架,Spring最基本、最核心的的jar包括 : beans、context、core、expression

  • spring-core.jar : 这个jar包 包含spring框架基本的核心工具类,这是其他组件的基本核心
  • spring-beans.jar : 这个jar包是所有应用都能用到的,它包含了访问配置文件、 创建和管理Bean (BeanFactory)、进行IOC/DI操作相关的类。
    BeanFactory能添加和管理bean,其底层是通过IOC控制反转(Inversion of Control,IoC)的方式来管理bean。IOC是一种设计思想,它将传统的程序中的对象依赖关系由直接依赖改为间接依赖,实现了程序中各个模块的解耦,降低了模块间的耦合度,提高了代码的可维护性和可复用性。
    ps :
    BeanFactory是属于旧方式的管理Bean的方式,开发中一般使用ApplicationContext方式来替代BeanFactory来管理bean。
  • spring-context.jar : 这个jar包功能是建立在 corebeans 的基础上实现的,他在基础的IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务任务调度JNDI定位EJB集成远程访问缓存以及多种视图层框架的支持
    ps :
    spring-context.jar 中的 ApplicationContext 能替代 BeanFactory 的添加和管理Bean,开发中更常用。ApplicationContext管理bean底层也是IOC
  • spring-expression.jar : 主要用于在Spring应用中表达和解析表达式。该功能在Spring 3.0中引入。

2.Spring的入门程序

第一步、在DIEA中创建一个Java项目,添加web功能模块。

第二步、在项目WEB-INF目录中创建lib文件夹,存放Spring框架最基本核心的jar包,让jar包生效。
获取spring框架基本核心jar包

第三步、创建UserDao接口 和 UserDaoImpl实现类
UserDao.java (接口)

public interface UserDao {public void say();}

UserDaoImpl.java (实现类)

public class UserDaoImpl implements UserDao{ //实现类//重写实现类中的方法@Overridepublic void say() {System.out.println("UserDaoImpl say hello World !");}
}

第四步、创建ApplicationContext.xml,其中添加和配置bean的信息 ( 用ApplicationContext的方式来在IOC容器中添加和管理bean)

<?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"><!--  将UserDaoImpl这个类交给Spring容器管理,即Beans管理,让其创建对象的实例  --><!--  通过创建 ApplicationContext的方式来添加和管理Bean  --><bean id="userDaoImpl" class="com.myh.ioc.UserDaoImpl"/>
</beans>

第五步、创建ApplicationContext获得bean,创建测试类使用bean。

public class TestIoC {public static void main(String[] args) {//1.初始化spring容器,加载配置文件ApplicationContext applicationContext =new ClassPathXmlApplicationContext("ApplicationContext.xml");//2.通过容器获得userDaoImpl实例UserDaoImpl userDaoImpl = (UserDaoImpl)applicationContext.getBean("userDaoImpl");//3.调用实例职工的say()方法userDaoImpl.say();}
}

3.依赖注入

3.1 依赖注入的概念

  • 依赖注入( Dependency Injection, 简称DI) 控制反转 (loC) 的含义相同,只不过这两个称呼是从两个角度描述的同一个概念 ( 不同角度下描述的同一概念 )。

  • 当某个Java对象 (调用者) 需要调用另一个Java对象( 被调用者,即被依赖对象)时。在 传统模式 下,调用者通常会采用 “new被调用者” 的代码方式来创建对象,如下图所示。这种方式会导致调用者被调用者之间的 耦合性增加不利于后期项目的升级和维护
    在这里插入图片描述

  • 在使用Spring 框架之后,对象的实例不再由调用者来创建,而是由Spring 容器来创建。
    Spring容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样,控制权应用代码转移到了Spring容器控制权发生了反转,这就是Spring的 控制反转 ( IOC )。

    Spring容器的角度来看,Spring 容器负责将被依赖对象赋值给调用者的成员变量,这相当于为
    调用者注入了它依赖的实例,这就是Spring的 依赖注入 ( DI) ,如下图所示。
    ps :
    控制主导权有“调用者” 转变为 “spring容器”,控制权发生转变,叫“控制反转” ( IOC ),控制反转的实际操作是 : “依赖注入” ( DI )。

    在这里插入图片描述

3.2 依赖注入的实现方式 (基于 属性 + set方法 + xml配置文件 的实现方式)

依赖注入的作用就是在使用Spring 框架创建对象时,动态地将其所依赖的对象注入Bean组件中,其中依赖注入的方式有以下这两个方式,一、属性 setter方法注入,二、 构造方法注入,具体介绍如下。

  • 属性setter方法注入 : (最为常用
    指Spring容器使用setter方法注入被依赖的实例(对象)。通过调用无参构造器或无参静态工厂方法实例化Bean后,调用该Bean的setter方法,即可实现基于setter方法的依赖注入。

  • 构造方法注入 :
    指Spring容器使用构造方法注入被依赖的实例。基于构造方法的依赖注入通过调用带参数的构造方法来实现,每个参数代表着一个依赖。

    属性setter方法注入的例子

    UserService.java

    public interface UserDao {public void say();}
    

    UserServiceImpl.java

    public class UserServiceImpl implements UserService{//声明UserDao属性 (被调用者实例)private UserDao userDao; // "userDao"为 Bean实例中相应的 “属性名”//添加UserDao属性的setter方法,用于依赖注入public void  setUserDao(UserDao userDao){this.userDao = userDao;}//实现接口中的方法@Overridepublic void say() {//调用userDao中的say()方法this.userDao.say();System.out.println("userServiceImpl say hello World!");}
    }
    

    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"><!--  将UserDaoImpl这个类交给Spring容器管理,即Beans管理,让其创建对象的实例  --><!--  通过创建 ApplicationContext的方式来添加和管理Bean  --><bean id="userDaoImpl" class="com.myh.ioc.UserDaoImpl"/><!--  在IOC容器中创建一个id为“userServiceImpl“的Bean,该Bean用于实例化 UserServiceImpl类的信息  --><bean id="userServiceImpl" class="com.myh.ioc.UserServiceImpl"><!--  将id为"userDao"的Bean实例注入到 userService实例中 --><!--   name : 表示Bean实例中相应的 “属性名”ref : 用于指定其属性值--><property name="userDao" ref="userDaoImpl"/><!--   property标签用于调用Bean实例中的 setUserDao() 方法完成属性赋值   --></bean></beans>
    

    TestDI.java (测试类)

    public class TestDI {public static void main(String[] args) {//1.初始化spring容器,加载配置文件ApplicationContext applicationContext =new ClassPathXmlApplicationContext("ApplicationContext.xml");//2.通过容器获取UserService实例UserServiceImpl userServiceImpl = (UserServiceImpl) applicationContext.getBean("userServiceImpl"); //getBean()中参数为配置bean对应的id名//3.调用实例中的say()方法userServiceImpl.say();}
    }
    
  • 以上为Spring容器 属性setter注入 的方式,也是实际开发中最为常用的一种方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/412404.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JS逆向实战案例2——某房地产token RSA加密

说明&#xff1a;仅供学习使用&#xff0c;请勿用于非法用途&#xff0c;若有侵权&#xff0c;请联系博主删除 作者&#xff1a;zhu6201976 一、 反爬分析 url1&#xff1a;aHR0cDovL3pmY2ouZ3ouZ292LmNuL3pmY2ovZnl4eC94a2I/c1Byb2plY3RJZD05MzBlMDQ0MmJjNjA0MTBkYTgzNzQ0MmQ…

【Ant Design of Vue】Modal.confirm无法关闭的bug

一、问题 在使用 Ant Design Vue 的 Modal.confirm 确认框时&#xff0c;出现了点击取消和确定后 Modal.confirm 确认框无法关闭的问题 二、代码 代码完全是 copy 的官网的代码&#xff0c;但是 copy 到本地后就会出现上述问题 <template><a-button click"sho…

玩转【Linux】--基本操作指令(二)

目录 一.指令的常见应用 1. 指令 "cd -" 2.指令"cd ~" 与指令"whoami" (1)指令"whoami" (2)指令"cd ~" 3.指令"alias " 4.指令"touch " 5.指令"mkdir -p" 6.指令"tree &q…

Linux/Networked

Enumeration nmap 网站更新之后有了一个引导模式&#xff0c;更利于学习了&#xff0c;之前看ippsec的视频&#xff0c;要不总是没有思路&#xff0c;现在出现的问题多了提示也更多了&#xff0c;还没有使用&#xff0c;一会用用再说 首先&#xff0c;第一个问题是“目标上正…

CNAS认可是什么?湖南长沙CNAS专业第三方软件检测机构有哪些?

CNAS是中国合格评定国家认可委员会(China National Accreditation Service for Conformity Assessment)的缩写&#xff0c;是专门负责评定和认可各类检验机构、实验室、认证机构和校验机构的国家认可机构。CNAS认可的好处在于&#xff0c;它证明了软件企业和软件产品具备严格的…

浅聊雷池社区版(WAF)的tengine

雷池社区版是一个开源的免费Web应用防火墙&#xff08;WAF&#xff09;&#xff0c;专为保护Web应用免受各种网络攻击而设计。基于强大的Tengine&#xff0c;雷池社区版提供了一系列先进的安全功能&#xff0c;适用于中小企业和个人用户。 Tengine的故事始于2011年&#xff0c;…

Nginx前后端分离部署springboot和vue项目

Nginx前后端分离部署springboot和vue项目&#xff0c;其实用的比较多&#xff0c;有的小伙伴对其原理和配置还一知半解&#xff0c;现在就科普一下&#xff1a; 1、准备后端项目 后端工程无论是微服务还是单体&#xff0c;一般最终都是jar启动&#xff0c;关键点就是把后端服…

Rust之构建命令行程序(三):重构改进模块化和错误处理

开发环境 Windows 10Rust 1.74.1 VS Code 1.85.1 项目工程 这次创建了新的工程minigrep. 重构改进模块化和错误处理 为了改进我们的程序&#xff0c;我们将修复与程序结构及其处理潜在错误的方式有关的四个问题。首先&#xff0c;我们的main函数现在执行两项任务:解析参数和…

Midjourney 1 月 17 日官方版本补丁更新公告,可能于二月底或三月向公众开放

Midjourney专区&#xff1a;Midjourney-喜好儿aigc 更多消息&#xff1a;AI人工智能行业动态&#xff0c;aigc应用领域资讯 功能更新和开发 修复/改变区域和缩小功能预计在本周或下周推出 测试一致的样式&#xff0c;强调样式而不是内容 常量字符功能正在开发中&#xff0c;但…

怿星科技测试实验室获CNAS实验室认可,汽车以太网检测能力达国际标准

2023年12月27日&#xff0c;上海怿星电子科技有限公司测试实验室&#xff08;下称&#xff1a;EPT LABS&#xff09;通过CNAS实验室认可批准&#xff0c;并于2024年1月5日正式取得CNAS实验室认可证书&#xff08;注册号CNAS L19826&#xff09;&#xff0c;标志着怿星科技的实验…

Android CarService源码分析

文章目录 一、CarService的基本架构1.1、Android Automative整体框架1.2、Framework CarService1.3、目录结构1.3.1、CarService1.3.2、Car APP 二、CarService的启动流程2.1、系统启动后在SystemServer进程中启动CarServiceHelperService2.2、CarService启动 三、CarService源…

Ubuntu 安装Python3.8

安装Python3.8 一、安装环境 Ubuntu2004Python2.7 目标是将python版本从 2.7 更新到3.8 二、安装步骤 2.1 下载python3.8安装包 wget https://www.python.org/ftp/python/3.8.0/Python-3.8.0.tar.xz2.2 安装 依次执行如下步骤&#xff1a; tar Jxf Python-3.8.0.tar.xz…