【Spring深度分析】IoC/DI机制 配置文件式 基本实现
2021-02-07 08:19
标签:read inter get 执行方法 ret catch script this 属性 首先,本人来提供一个 容器接口: 现在,本人来给出这个接口的实现类: 接下来,本人再来给出一个 用于封装xml文件中 每一个bean节点信息 的BeanDefinition类: 那么,通过上述的接口与类,我们就基本实现了配置文件式的IoC/DI机制 现在,本人来提供一个测试类 以及 一个测试配置文件来测试下我们上面的代码是否复合要求: 接下来是配置文件: 那么,现在本人最后再来给出一个Demo类: 现在,本人来展示下运行结果: 那么,可以看到,我们基本实现了IoC/DI机制! 接下来我们只需要处理一下子标签的注入就ok了 【Spring深度分析】IoC/DI机制 配置文件式 基本实现 标签:read inter get 执行方法 ret catch script this 属性 原文地址:https://www.cnblogs.com/codderYouzg/p/12776478.html
容器接口 —— ApplicationContext接口:
package edu.youzg.simulate_IoC.bean;
public interface ApplicationContext {
public Object getBean(String beanId);
}
容器接口实现类 —— ClassPathXmlApplicationContext类:
package edu.youzg.simulate_IoC.bean;
import edu.youzg.simulate_IoC.entity.BeanDefinition;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ClassPathXmlApplicationContext implements ApplicationContext {
//以id为键,相应的BeanDefinition为值,封装从xml配置文件中所需读取到的的信息
private static Map
封装节点信息 —— BeanDefinition类:
package edu.youzg.simulate_IoC.entity;
/**
* 用于封装xml文件中 每一个bean节点信息
*/
public class BeanDefinition {
private String id;
private String classpath;
private String init;
private String scope;
public String getInit() {
return init;
}
public void setInit(String init) {
this.init = init;
}
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getClasspath() {
return classpath;
}
public void setClasspath(String classpath) {
this.classpath = classpath;
}
}
测试:
首先是一个 要被自动注入的类:package edu.youzg.simulate_IoC.test;
public class AccountService {
public AccountService() {
System.out.println("目标类的 构造方法");
}
public void sayHello() {
System.out.println("hello xml IoC!");
}
public void doSomething() {
System.out.println("目标类的 某方法");
}
}
package edu.youzg.simulate_IoC.test;
import edu.youzg.simulate_IoC.bean.ApplicationContext;
import edu.youzg.simulate_IoC.bean.ClassPathXmlApplicationContext;
/**
* @Author: Youzg
* @CreateTime: 2020-04-26 00:35
* @Description:带你深究Java的本质!
*/
public class Demo {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
AccountService service1 = (AccountService) context.getBean("accountService");
AccountService service2 = (AccountService) context.getBean("accountService");
service1.sayHello();
System.out.println(service1 == service2);
}
}
下一篇:Springboot Cache
文章标题:【Spring深度分析】IoC/DI机制 配置文件式 基本实现
文章链接:http://soscw.com/index.php/essay/52106.html