Spring应用(二)IoC的理解

本文介绍了Spring框架中的依赖注入(DI)概念,包括控制反转(IoC)的基本原理及其如何简化对象管理和依赖关系。同时,文章深入探讨了两种依赖注入方式:构造器注入和setter注入,并通过示例代码展示了具体的实现过程。

一、依赖注入的概念

       Spring的两个核心概念:一个是控制反转(Inversion of ControlIoC),也可以叫做依赖注入(Dependency InjectionDI);还有一个面向切面编程(Aspect Oriented ProgrammingAOP)。IocAOP虽然不是Spring首创,然而它在这两方面都做得很优秀,可以说整个Spring框架都是围绕着其IoC实现及AOP实现架设起来的。

       控制反转模式的基本概念:当某个Java对象需要(依赖)另一个Java对象时,不是自身直接创建依赖对象,而是由实现IoC的容器(如Spring框架的IoC容器)来创建,并将它注入需要这个依赖对象的Java对象中。

       应用系统系统中通过引入实现了IoC模式的IoC容器,就可以由IoC容器来管理对象的生命周期和依赖关系等,从而使得应用程序的配置和依赖性规范与实际的应用程序代码分开。

二、Spring的依赖注入

       Spring框架就带有一个IoC容器。它使用的依赖注入方式有构造器注入和Setter注入两种。

       1、构造器注入

构造器注入,指的是通过构造方法来传入所依赖的对象,从而完成依赖关系的设定。

       2、设置注入

设置注入是指通过setter方法传入依赖对象。这种注入方式简单而且直观。

三、综合案例

package cn.csdn.service;
public interface SpringService {
	void display();
}
package cn.csdn.service;
public class SpringServiceImpl implements SpringService {
	private String say;
	private String str;
	public SpringServiceImpl() {
		// TODO Auto-generated constructor stub
	}
	public SpringServiceImpl(String str, String say) {
		this.str = str;
		this.say = say;
	}
	public void setSay(String say) {
		this.say = say;
	}
	public void setStr(String str) {
		this.str = str;
	}
	@Override
	public void display() {
		// TODO Auto-generated method stub
		System.out.println(str + "J2EE Spring," + say);
	}
}

 

<?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:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<bean id="ssi" class="cn.csdn.service.SpringServiceImpl">
		<!--
			setter()设置注入 <property name="say" value="IoC控制反转"></property>
		-->
		<!--
			构造器注入1,通过参数的索引位置匹配 (索引位置index从0开始)
			<constructor-arg index="0"> 
				<value>你好!</value>
			</constructor-arg> 
			<constructor-arg index="1">
				<value>O(∩_∩)O哈哈~</value> 
			</constructor-arg>
		-->
		<!--
			构造器注入2,通过参数类型匹配(按照构造器中参数的顺序、类型逐个匹配,当构造器中参数顺序、类型发生变化时,下面的参数配置顺序、类型也要进行相应的调整)
		-->
		<constructor-arg type="java.lang.String">
			<value>你好!</value>
		</constructor-arg>
		<constructor-arg type="java.lang.String">
			<value>O(∩_∩)O哈哈~</value>
		</constructor-arg>
	</bean>
</beans>

 

package cn.csdn.junit;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import cn.csdn.service.SpringService;
public class SpringJunit {
	@Test
	public void test1() {
		ApplicationContext ac = new ClassPathXmlApplicationContext(
				new String[] { "applicationContext.xml" });
		SpringService se = (SpringService) ac.getBean("ssi");
		se.display();
	}
	@Test
	public void test2() {
		ApplicationContext ac = new FileSystemXmlApplicationContext(
				new String[] { "src/applicationContext.xml" });
		SpringService se = (SpringService) ac.getBean("ssi");
		se.display();
	}
}

       Spring的容器有两个接口:BeanFactoryApplicationContext,这两个接口的实例被称为Spring应用上下文,它们都是用来产生Bean的工厂,即负责创建和管理Bean

       在实际应用中推荐使用ApplicationContext,它是BeanFactory的子接口,具有比BeanFactory更完善的功能。它的实现类常用的是org.springframework.context.support包中的以下三个类:

       ClassPathXmlApplicationContext:主要用来从类路径(CLASSPATH)中的xml文件载入上下文定义信息。

       FileSystemXmlApplicationContext:从指定的文件系统路径中的xml文件载入上下文定义信息。

       XmlWebApplicationContext:从Web系统中的xml文件载入上下文定义信息。

       在创建Spring上下文的实例时,必须提供Spring容器管理的Bean的详细配置信息,Spring的配置信息通常会采用xnl文件。所以,在创建Spring上下文实例时,应该提供xml配置文件作为参数传入。

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值