Spring的核心功能之IOC的注入方式以及Spring与tomcat的整合

Spring项目从零搭建:IDEA+Maven配置与依赖注入实战 在Java企业级开发中,依赖管理和项目构建是基础且关键的环节。Maven作为主流的项目管理工具,通过POM文件定义项目结构、依赖关系和构建生命周期,其核心原理在于坐标定位和仓库管理。Spring框架的IoC(控制反转)容器通过依赖注入技术,实现了对象创建与依赖关系的解耦,提升了代码的可测试性和可维护性。这一技术组合的价值在于为复杂应用提供了标准化的项目骨架和松耦合的架构基础,广泛应用于微服务、Web应用和企业级系统开发。本文聚焦于解决Spring项目初始配置中的常见痛点,例如Maven仓库配置、IDEA环境 阅读详情

Spring的核心功能之IOC的注入方式以及Spring与tomcat的整合

IOC的注入方式

1 , set注入

set注入的数据类型可为八种基本类型,还有引用类型,数组,自定义类型
示例:
UserAction类添加几个封装属性,提供set,get方法,写一个测试方法

package com.hsl.ioc.web;

import java.util.List;

import com.hsl.ioc.biz.UserBiz;
import com.hsl.ioc.biz.impl.UserBizImpl1;
/**
 * spring的注入方式 1、set注入
 * 基本类型,String,
 * 数组,自定义类型
 *  2、构造注入 3、自动装配
 * @author Administrator
 *
 */
public class UserAction {
	private UserBiz userBiz;
	private String uname;
	private int age;
	private List<String> hobby;
	
	public String getUname() {
		return uname;
	}

	public void setUname(String uname) {
		this.uname = uname;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public List<String> getHobby() {
		return hobby;
	}

	public void setHobby(List<String> hobby) {
		this.hobby = hobby;
	}

	public UserBiz getUserBiz() {
		return userBiz;
	}

	public void setUserBiz(UserBiz userBiz) {
		this.userBiz = userBiz;
	}

	public void upload() {
		userBiz.upload();
	}
	
	public void test1() {
		System.out.println(this.uname);
		System.out.println(this.age);
		System.out.println(this.hobby);
	}
	
	
}

核心spring-context.xml文件配置
set注入用property标签,注意list赋值(和数组一样)和其他数据类型赋值的区别

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:task="http://www.springframework.org/schema/task"
	
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd">

<!-- 	<bean class="com.hsl.ioc.biz.impl.UserBizImpl1" id="userBiz1"></bean> -->
	<bean class="com.hsl.ioc.biz.impl.UserBizImpl2" id="userBiz"></bean>
	<bean class="com.hsl.ioc.web.UserAction" id="userAction">
	<property name="userBiz" ref="userBiz"></property>
	<property name="uname" value="18"></property>
	<property name="age" value="18"></property>
	<property name="hobby" >
	<list>
	<value>琴</value>
	<value>棋</value>
	<value>书</value>
	<value>画</value>
	</list>
	</property>
	
	</bean>
	
	<bean class="com.hsl.ioc.web.TeacherAction" id="teacherAction">
		<property name="userBiz" ref="userBiz"></property>
	</bean>

</beans>

测试类:

package com.hsl.ioc.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.hsl.ioc.web.TeacherAction;
import com.hsl.ioc.web.UserAction;

public class UserTest {
	public static void main(String[] args) {

		ApplicationContext springContext=new ClassPathXmlApplicationContext("/spring-context.xml");
		UserAction userAction=(UserAction)springContext.getBean("userAction");

		userAction.test1();
	}
}

注入结果:
在这里插入图片描述

2 , 构造注入

改变UserAction类
将uname,age属性的set,get方法取出,提供这两个属性的构造器

package com.hsl.ioc.web;

import java.util.List;

import com.hsl.ioc.biz.UserBiz;
import com.hsl.ioc.biz.impl.UserBizImpl1;
/**
 * spring的注入方式 1、set注入
 * 基本类型,String,
 * 数组,自定义类型
 *  2、构造注入 3、自动装配
 * @author Administrator
 *
 */
public class UserAction {
	private UserBiz userBiz;
	private String uname;
	private int age;
	private List<String> hobby;
	
	
	public UserAction() {
		super();
	}

	public UserAction(String uname, int age) {
		super();
		this.uname = uname;
		this.age = age;
	}

	public List<String> getHobby() {
		return hobby;
	}

	public void setHobby(List<String> hobby) {
		this.hobby = hobby;
	}

	public UserBiz getUserBiz() {
		return userBiz;
	}

	public void setUserBiz(UserBiz userBiz) {
		this.userBiz = userBiz;
	}

	public void upload() {
		userBiz.upload();
	}
	
	public void test1() {
		System.out.println(this.uname);
		System.out.println(this.age);
		System.out.println(this.hobby);
	}
	
	
}

改变spring-context.xml文件的配置,构造注入是使用constructor-arg标签

<constructor-arg name="uname" value="ls"></constructor-arg>
<constructor-arg name="age" value="19"></constructor-arg>

注入结果:
在这里插入图片描述

3 , 自动装配

原本你有多少个Action类有要引用一次
<property name="userBiz" ref="userBiz"></property>
使用自动装配后就不需要了,比较方便
自动装配有两种:

①byName:(一个实现类多个接口,在企业里用)
spring框架根据接口的名字(属性名)去上下文进行寻找,是通过Bean标签的id进行寻找;

②byType:(一个接口一个实现类)
spring框架根据接口自动在spring的上下文中去寻找与之匹配的实现类,进行自动注入;
如果在spring上下文中有连个匹配上的,那会报错

在这里插入图y片描述

Spring与tomcat的整合

我将在示例中体现
通常xml文件名是程序员自己取,不是特定的名字,所以我们需要动态设置xml文件名

package com.hsl.ioc.listenter;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * 在用户每一次发送任意请求,
 * 在对应请求处理代码中可以获取到spring容器中配置的任意的JavaBean,
 * 从而可以对应的javabean中定义的方法
 * 
 *  在tomcat启动的时候自动去加载spring的上下文(ApplicationContext)
 *  利用监听器去把spring的上下文放到tomcat的上下文中
 *  为了解决框架的配置文件冲突的问题,我们需要动态指定spring上下文的配置文件名称;
 * 浏览器--》request--》servletContext-->springContext-->任意的javaBean
 * 
 * @author Administrator
 *
 */
	@WebListener
public class SpringLoaderListenter implements ServletContextListener {
	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("tomcat已启动就触发");
		ServletContext servletContext = sce.getServletContext();
		String springXmlLocation= servletContext.getInitParameter("springXmlLocation");
		System.out.println("spring上下文的配置文件:"+springXmlLocation);
		ApplicationContext springContext=null;
		if(springXmlLocation==null||"".equals(springXmlLocation)) {
			springContext=new ClassPathXmlApplicationContext("/spring-context.xml");
		}else {
			springContext=new ClassPathXmlApplicationContext(springXmlLocation);
			}
		
		servletContext.setAttribute("spring_key", springContext);
	}
}

我又新建了一个与spring-context.xml一样配置的文件为spring-other.xml
需要在web.xml配置一下

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

  <display-name>Archetype Created Web Application</display-name>
  <context-param>
  <param-name>springXmlLocation</param-name>
  <param-value>/spring-other.xml</param-value>
  </context-param>
</web-app>

创建一个测试的servlet

package com.hsl.ioc.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;
@WebServlet("/user")
public class UserServlet extends HttpServlet {
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("用户发送请求");
		ApplicationContext springContext= (ApplicationContext) req.getServletContext().getAttribute("spring_key");
		UserAction userAction=(UserAction)springContext.getBean("userAction");
		userAction.upload();
		
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
}

结果显示:
在这里插入图片描述

无论调用哪个请求,它都能找到相对应的servlet,得到相应的javaBean

SSM框架入门:从零搭建Java Web项目,理解Spring生态核心 在Java Web开发领域,掌握经典框架组合是构建企业级应用的基础。SSM(Spring + Spring MVC + MyBatis)作为Java EE时代的经典架构,其核心价值在于清晰的三层分离架构与配置驱动的开发模式。从概念层面看,Spring框架通过控制反转(IoC)和面向切面编程(AOP)实现了组件解耦;Spring MVC基于前端控制器模式处理Web请求分发;MyBatis则通过SQL映射文件简化了数据库操作。这种组合让开发者能够透彻理解从请求接收到数据持久化的完整链路,特别是通过手动配置数据源 阅读详情

相关推荐

Java Web宠物网站实战:Spring+Struts2+JSP+MySQL整合开发全解析

在Java Web开发领域,MVC架构模式是构建企业级应用的核心思想,它将应用分为模型、视图和控制器三层,以实现关注点分离和代码复用。其工作原理是通过前端控制器拦截用户请求,分发给相应的处理器执行业务逻辑,并最终渲染视图返回响应。这种架构的技术价值在于提升了代码的可维护性、可测试性和团队协作效率,广泛应用于电商、内容管理、社交平台等各类Web系统。本文以宠物网站项目为具体场景,深入剖析如何将经典的Spring框架与Struts2进行整合,解决依赖注入与请求控制器的协同问题,并详细演示了使用JSP结合JSTL

weixin_34175509的博客 348

Spring纯注解配置以及部署到tomcat

第一步:导入依赖。确保tomcat版本不低于7.0 第二步:创建App类并继承AbstractAnnotationConfigDispatcherServletInitializer类,在Servlet3.0环境中容器会自动找到这个类。 /** * 在Servlet3.0环境下,自动被容器找到 */ public class App extends AbstractAnnotationC...

u014472126的博客 691

基于JSP+Struts2+Spring+MySQL的宠物网站开发实战与架构解析

Java Web开发是构建企业级应用的核心技术体系,其核心在于理解MVC架构模式如何将用户请求、业务逻辑与数据持久化分离。通过依赖注入、面向切面编程等原理,Spring框架实现了组件解耦与事务管理,而Struts2则通过拦截器机制集中处理请求控制。这些技术的组合为构建可维护、可扩展的Web应用提供了坚实基础,尤其在内容管理、电商平台及社区论坛等需要动态数据交互的场景中广泛应用。本文以宠物社区网站为例,深入探讨了如何整合JSP、Struts2、Spring与MySQL这一经典技术栈,并重点解析了用户认证安全与

weixin_34392435的博客 916

实践:在tomcat中为springboot应用配置context

springboot内嵌tomcat,开发者可以打成fat jar包独立运行;也可以打成war包放到tomcat容器中运行。为了区分开发环境、测试环境、生产环境,springboot允许指定spring.profiles.active参数,这样可以在同一份application.yml里配置出不同环境。详细做法,可以参考《Spring Boot 配置优先级顺序》。         但是我认为这个

whatnamecaniuse的专栏 1万+

lofar谱 matlab_一种用于分类识别的线谱增强及特征提取方法与流程

本发明属于声信号处理技术领域,具体涉及一种用于分类识别的线谱增强及特征提取方法。背景技术:水下声音目标的被动探测和识别领域中,利用舰船辐射噪声对舰船类型进行识别是十分常见的。舰船辐射噪声通常由机械噪声,螺旋桨噪声和水动力噪声三部分构成,前两种信号是噪声的线谱和连续谱的主要来源。其中线谱由于具有较高的信噪比,并且携带着声源特征信息,而被广泛研究和应用。但是目前的识别方法中,因为连续谱信息缺乏较为明确...

weixin_39517859的博客 5476

Xilinx SDK工程编译、链接、调试注意事项

1、添加工程 启动SDK时选取workspace,如下图所示: 对应的workpace文件夹中会生成如下几个文件: 如果当前workspace是首次加载工程,SDK会进入启动界面 点击Import Project,导入已有工程 点击Browse,添加工程路径,一个完整的工程包含一个bsp文件夹,一个HW文件夹,和一个src文件夹(添加C功能函数) 点击Fini...

Autumn_He的博客 1万+

spring源码分析-spring与tomcat整合原理

spring与tomcat整合的整理的流程图如下: 流程图解析: 1.SPI机制:tomcat启动时会通过SPI的机制加载所有包下面的META-INF/services/javax.servlet.ServletContainerInitializer,读取里面的内容(里面是一个实现了ServletContainerInitializer的类全路径)。此时tomcat就会实例化该全路径的类,然后调用onStartup()这就是spring和tomcat整合的入口,这种spi机制使用的非常广泛,比如spri

hongtaolong的博客 1005

风二西CTF流量题大集合-刷题笔记|基础题(1)

部分题目已包含脚本和解题视频,但更建议自行分析和手搓脚本。

zerorzeror的博客 2764

Spring 整合嵌入式 Tomcat 容器

Tomcat SPI 机制中暴露了一个接口 ServletContainerInitializer,在 Tomcat 启动生命周期过程中会去加载加载该接口的所有实现类,并且还会解析 @HandlersTypes 注解,解析到的结果存放到一个 Set

龚小帅的博客 922

STM32F103C8T6用官方bootloader实现IAP升级操作方法

在使用STM32F103C8T6单片机IAP功能时,可以自己写bootloader程序,也可以使用官方bootloader文件。下面说一下使用官方bootloader的使用方法。 首先下载官方bootloader文件 目前使用的是这个版本,打开文件夹,选择适合自己编译器的工程。 目前使用的是keil,所以打开MDK-ARM文件夹 打开IAP工程 打开后根据自己的单片机型号,对工程进行简单的修...

HXYDJ的博客 1万+

组态王7.5和SQLsever数据库交互

摘要:本文详细介绍了组态王7.5与SQL Server 2016数据库交互的实现流程,包括建立连接、数据存储与查询操作。主要内容涵盖ODBC数据源配置、数据库表格创建、数据插入及查询功能实现(含日期控件查询)

gsjkwg的博客 1577

spring注入方式及tomcate整合

什么是spring,它能够做什么? Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。 Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。 然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 目的:解决企业应用开发的复杂性 功能:使用基本的...

kiki208418895的博客 368

软件设计师考试下午题代码部分详解:23种设计模式全面解析

软件设计师考试的下午题通常会考察设计模式的应用,这部分内容既是重点也是难点。本文将系统地介绍考试中常见的23种设计模式,通过详细代码示例和通俗易懂的讲解,帮助考生掌握这些核心知识点,提高应试能力。概念:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。适用场景:系统要独立于产品的创建、组合和表示时;系统要由多个产品系列中的一个来配置时。@Override@Override@Override@Override// 产品族A@Override。

4万+

Spring:ioc

1. 什么是spring,它能够做什么?    Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。  Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。    目的:解决企业应用开发的复杂...

x_b_z123的博客 266

Android Activity面试题最全解析(5万字长文)

Intent是Android中用于启动活动、服务或广播的一种消息对象。它包含了一系列键值对数据,用于描述操作的目的以及需要传递的信息。IntentString:字符串intfloatlong:基本数据类型Parcelable:实现了Parcelable接口的对象:实现了接口的对象示例代码如下:Java深色版本1// 创建Intent并传递数据");67// 启动新的Activity是一个XML标签,用于定义ActivityService或可以响应的Intent类型。它包含了。

大模型大数据攻城狮的专栏 801

【Claude】Not logged in 错误:未登录状态的判断与 /login 认证路径 bug报错已解决

login 是首选修复:大多数 "Not logged in" 只需重新执行 /login检查系统时间:时间偏差是 Token 验证失败的常见原因避免密钥库被清理:将 Claude Code 添加到系统清理工具的白名单企业环境用 API Key:如果组织禁用 OAuth,使用 API Key 认证区分凭证类型:理解 Not logged in(无凭证)vs Invalid key(有但无效)

博客 7306

Spring 框架入门介绍及IoC的三种注入方式

- 用Spring框架来实现全新的控制反转方法,让你的应用程序更加灵活和易于维护 - 创建一个基于Spring框架的控制反转教程,帮助开发人员更好地理解和运用这个设计模式 - 探索Spring框架中控制反转的潜在优势,包括减少模块之间的耦合、提升可测试性和可扩展性 - 设计一个创新的Spring应用程序,利用控制反转实现模块之间的松耦合关系 - 分析控制反转在Spring框架中的实际应用,包括依赖注入和依赖查找的使用场景

让优秀成为一种习惯! 2831

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spring-IOC

文章目录什么是spring,它能够做什么?中间层框架、万能胶什么是控制反转(或依赖注入)为什么要用IOCspring的XML文件参数Spring-IOC案例pom依赖UserBizUserBizImpl1UserBizImpl12set注入注入类(注入方式及各类类型)spring-context.xml配置测试spring与tomcat整合web.xmlSpringLoaderListenerUserAction测试 什么是spring,它能够做什么? Spring是一个开源框架,它由Rod Johnson

qq_45384482的博客 410

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spring之ioc

Spring全家桶 架构方案层面 spring struts Hibernate spring springmvc mybatis springboot dubbox(16年到19年与Spring分庭抗议) SpringCloud 技术层面 安全技术方面:Shiro springSecurity 数据库层面:hibernate/mybatis SpringDataJpa 消息中间件:activityMQ、RabbitMQ、kaffka spring..MQ .... ...

qq_59025975的博客 194

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Spring简介及入门(IOC)

Spring框架是一个开源的Java应用程序框架,旨在简化开发复杂的企业级Java应用程序。同时,也是一个分层的、面向切面的 Java 应用程序的一站式轻量级解决方案,它是 Spring 技术栈的核心和基础,是为了解决企业级应用开发的复杂性而创建的。它提供了一套全面的解决方案,涵盖了从基本的核心功能到企业级应用开发所需的各种特性。

weixin_74352229的博客 203

spring之IOC

什么是spring,它能够做什么? Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。 Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。 然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 目的:解决企业应用开发的复杂性 功能:使用基本的...

weixin_45180770的博客 146

Spring框架核心机制解析:从IoC容器到Spring Boot实战指南

在Java企业级开发领域,控制反转(IoC)和依赖注入(DI)是构建松耦合、可维护应用架构的核心设计模式。其原理在于将对象的创建与依赖管理权交由外部容器处理,从而提升代码的模块化和可测试性。这一机制的技术价值在于实现了组件间的解耦,使得大型应用更易于扩展和维护。在实际应用场景中,Spring Framework通过ApplicationContext作为IoC容器实现,支持XML配置、Java配置和组件扫描等多种Bean定义方式,并结合构造器注入、Setter注入等模式完成依赖组装。进一步地,Spring

weixin_34007886的博客 430

tomcat面试和Spring的面试题

tomcat和Spring面试题

weixin_58276266的博客 2219

介绍Spring和SpringBoot

本文概述了Spring和SpringBoot框架的核心特性。Spring通过IoC容器实现控制反转和依赖注入,支持纯注解开发,整合第三方技术如MyBatis,并提供AOP和事务管理功能。SpringBoot在Spring基础上进一步简化开发,具备自动配置、内置服务器和起步依赖三大特性,实现开箱即用。两者相辅相成,Spring提供核心功能,SpringBoot则优化配置流程,提升开发效率。

2501_93794397的博客 49

Spring-SpringMVC-SpringBoot理解

由于SpringMVC配置繁杂使用起来很麻烦,SpringBoot相当于一个脚手架,将最基本最核心的开发功能进行整合,开发起来更加方便,只需要配置yml,properties配置文件即可。这两个配置文件包含所有配置项。SpringMVC只是Spring的一个模块module,属于Spring框架中WEB层的一部分。Spring是一个完整的框架,能够解决全栈的问题,核心是IOC控制反转和AOP面向切面。即SpringMVC归属于Spring,不是一个独立的框架。

qq_65578092的博客 375

SpringBoot 整合 SSM 全流程详解(含 JUnit+MyBatis 实战)(Spring系列18)

本文围绕SpringBoot整合SSM框架展开,先阐明Spring与SpringMVC自动配置原理,再详细讲解JUnit、MyBatis的整合步骤与代码实现,完整呈现SSM项目落地流程。同时介绍TODO标记使用技巧,针对端口配置、静态资源处理等常见问题给出解答,帮助开发者简化配置、高效开发企业级应用。

weixin_68315058的博客 879
上一篇: Spring与ioc
下一篇: Spring的核心功能之AOP(面向切面编程)
water_java
博客等级 码龄7年 9粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值