《SSM框架系统学习》(1) - Spring IoC 容器

版权声明:转载请注明出处! https://blog.csdn.net/yxw908186797/article/details/88246265

IoC称做反转控制,用来消减计算机程序的耦合问题。依赖注入(DI)是IoC的另外一种说法。概念我就不讲了,网上一找一大堆。
我的理解就是把实例化的过程交给Spring容器来实现,就是我们直接从Spring容器里面获取就可以,不需要自己去 new ClassName();。

项目的目录格式如下:
在这里插入图片描述
在src的main目录下创建TestDao的接口、TestDaoImple的实现类。在test目录下创建Test测试类。

package dao.itf;
public interface TestDao {
	public void sayHello();
}

package dao.impl;
import dao.itf.TestDao;
import org.springframework.stereotype.Service;


public class TestDaoImpl implements TestDao{
	
	public void sayHello() {
		System.out.println("Hello, 关注我的博客吧!");
	}
}

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">
	<!-- 将指定类TestDaoImpl配置给Spring,让Spring创建其实例 -->
	<bean id="test" class="dao.impl.TestDaoImpl" />
	<!-- 意思是 创建一个bean 名字(id)是 test ,它的class文件来自dao.impl.TestDaoImpl这个地方 -->
</beans>

我们一会就要从Spring容器中获取到TestDaoImpl的实例对象。介绍三种方式。

先介绍一个类,叫‘ApplicationContext’。是BeanFactory的子接口。详细功能自行在了解,下面讲它的其中一个用法,从XML文件中装配和获取Bean。

第一种:

通过ClassPathXmlApplicationContext创建:

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

import dao.itf.TestDao;
public class Test {
	public static void main(String[] args) {
		ApplicationContext appCon = new ClassPathXmlApplicationContext("applicationContext.xml");
		TestDao t = (TestDao)appCon.getBean("test");
		t.sayHello();
	}
}

ClassPathXmlApplicationContext会从类路径目录(src根目录)中寻找指定的XML配置文件。
运行结果为:
在这里插入图片描述

第二种

通过FileSystemXmlApplicationContext从绝对路径中找XML文件。
PS:文件路径的斜杠是两条斜杠 “\\”!

package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

import dao.itf.TestDao;
public class Test {
	public static void main(String[] args) {
		ApplicationContext appCon = new FileSystemXmlApplicationContext("F:\\Workspaces\\Myeclipse\\MavenTest\\src\\main\\java\\applicationContext.xml");
		TestDao t = (TestDao)appCon.getBean("test");
		t.sayHello();
	}
}

结果跟第一种一样。

第三种

通过Web服务器实例化ApplicationContext容器,在Web.xml文件中添加以下代码。

<!-- 指定Spring的配置文件,多个配置文件以逗号分隔 -->
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>
		classpath:spring-config/applicationContext.xml
	</param-value>
</context-param>
<!-- 指定以Listener方式启动Spring容器 -->
<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
</listener>

尚未运行

总结:

采用绝对路径(方法2)的加载方式将导致程序的灵活性变成,一般不这么使用。
通常在Spring的Java应用中采用ClassPathXmlApplicationContext(第一种)来实例化 ApplicatonContext容器(就是我们现在写的不涉及服务器的代码)。
在Web应用中则是用Web服务器来实例化 ApplicatonContext容器(第三种)。

猜你喜欢

转载自blog.csdn.net/yxw908186797/article/details/88246265