一 依赖注入和控制反转(DI & IoC)
1 依赖注入的模拟
//客户端代码
public class Business implements IBeanAware {
private IWriter writer;
public Business() {
}
// type1 Constructor Injection
public Business(IWriter writer) {
this.writer = writer;
}
// type2 Interface Injection
@Override
public void injectBean(Object dependcy) {
writer = (IWriter) dependcy;
}
// type3 Setter Injection
public void setWriter(IWriter writer) {
this.writer = writer;
}
public void save() {
writer.write();
}
public static void main(String[] args) throws Exception {
BeanFactory applicationContext = new FileSystemBeanFactory(
"simulation.properties");
Business biz = (Business) applicationContext.getBean("business");
biz.save();
}
}
public interface IBeanAware {
public void injectBean(Object dependcy);
}
// 组件接口
public interface IWriter {
public void write();
}
//组件代码
public class FileWriter implements IWriter {
@Override
public void write() {
System.out.println("write into file.");
}
}
//组件代码
public class ConsoleWriter implements IWriter {
@Override
public void write() {
System.out.println("write into console.");
}
}
//模拟IoC容器接口
public interface BeanFactory {
public Object getBean(String beanName) throws Exception;
}
//模拟IoC容器,管理依赖注入
public class FileSystemBeanFactory implements BeanFactory {
private Object bean;
private Properties props;
public FileSystemBeanFactory(String contextFile) throws Exception {
props = new Properties();
props.load(new FileInputStream(contextFile));
}
@Override
public Object getBean(String beanName) throws Exception {
bean = BeanCreator.create(beanName, props);
return bean;
}
}
//模拟IoC容器,管理依赖注入
public class ClassPathBeanFactory implements BeanFactory {
private Object bean;
private Properties props;
public ClassPathBeanFactory(String contextFile) throws Exception {
props = new Properties();
props.load(this.getClass().getResourceAsStream((contextFile)));
}
@Override
public Object getBean(String beanName) throws Exception {
bean = BeanCreator.create(beanName, props);
return bean;
}
}
public class BeanCreator {
public static Object create(String beanName, Properties props)
throws Exception {
IWriter writer = (IWriter) Class.forName(props.getProperty("writer"))
.newInstance();
Class<?> claz = Class.forName(props.getProperty(beanName));
Constructor<?> c = claz.getConstructor(IWriter.class);
Object bean;
if (c.getParameterTypes().length != 0) {
bean = c.newInstance(writer);
System.out.println("type1 Constructor Injection");
} else if (IBeanAware.class.isAssignableFrom(claz)) {
bean = claz.newInstance();
IBeanAware aware = (IBeanAware) bean;
aware.injectBean(writer);
System.out.println("type2 Interface Injection");
} else {
bean = claz.newInstance();
Method m = claz.getDeclaredMethod("setWriter", IWriter.class);
m.invoke(bean, writer);
System.out.println("type3 Setter Injection");
}
return bean;
}
}
bean.properties
business = org.powersoft.spring.demo.Business
writer = org.powersoft.spring.demo.FileWriter
#writer = org.powersoft.spring.demo.ConsoleWriter
分享到:
相关推荐
依赖注入则是将这种耦合关系反转,由外部容器(如Spring IoC容器)负责创建对象并管理它们的依赖关系,使得对象可以在不知道依赖的具体实现的情况下工作,降低了代码的复杂性。 Spring框架的IoC(Inversion of ...
这种模拟实现虽然简单,但可以让我们理解Spring框架背后的基本机制。然而,实际的Spring框架提供了更高级的功能,如AOP(面向切面编程)、代理模式、基于XML或Java配置的bean定义、条件注解等,使得依赖注入更加灵活...
本篇文章将深入探讨如何通过Java代码来模拟Spring的依赖注入机制。 **依赖注入的概念** 依赖注入是一种设计模式,它允许对象在运行时获取其依赖项,而不是在构造函数或初始化方法中硬编码这些依赖项。这样做的好处...
现在,我们将深入探讨如何通过自己的代码来模拟Spring的依赖注入。 首先,理解依赖注入的概念至关重要。依赖注入意味着组件不直接创建其依赖的对象,而是由外部实体(如Spring IoC容器)提供。这样做的好处是,我们...
AngularJS有一经典之处就是依赖注入,对于什么是依赖注入,熟悉spring的同学应该都非常了解了,但,对于前端而言,还是比较新颖的。 依赖注入,简而言之,就是解除硬编码,达到解偶的目的。 下面,我们看看...
Spring依赖注入机制,也被称为控制反转(Inversion of Control,IOC),是Spring框架的核心特性,它使得应用程序的组件之间能够实现松散耦合。在传统编程中,对象通常自行创建和管理它们所依赖的其他对象,而在...
### Spring 依赖注入详解 #### 一、依赖注入(DI)概述 依赖注入(Dependency Injection,简称 DI)是一种设计模式,旨在减少代码间的耦合度并简化对象的创建过程。这种模式通过将对象间的依赖关系从对象内部转移...
这个实现可能包含了XML配置文件、带有注解的Java类,以及一些测试用例,用于演示如何在没有Spring框架的情况下实现依赖注入和类扫描。通过研究这个实现,你可以进一步加深对这些概念的理解,并可能将其应用到自己的...
Spring依赖注入是Java开发中的核心概念,特别是在使用Spring框架时,它是实现松耦合和可测试性的重要机制。依赖注入(Dependency Injection,简称DI)允许我们解耦组件之间的关系,使得代码更易于维护和扩展。它通过...
在这个“Spring.Net依赖注入例子”中,我们将探讨如何利用Spring.NET来实现DI。 首先,依赖注入的基本思想是,对象不应该自行创建或查找其依赖的对象,而是应该由外部容器(如Spring.NET的ApplicationContext)在...
你需要模拟Spring容器的行为,管理bean的生命周期,处理依赖注入,并且确保在遇到循环依赖时能够优雅地处理。这涉及到对Java反射机制的理解,以及如何通过设计模式来解耦代码。 在压缩包文件"spring-Imitation"中,...
在Java世界中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IOC)能力,成为企业级应用开发的首选框架之一。理解并模拟Spring的IOC机制对于深入学习Spring...
在IT行业中,Spring框架是Java开发领域中广泛使用的轻量级框架,以其强大的依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect Oriented Programming,简称AOP)特性而闻名。本教程将深入探讨如何利用...
总结来说,这个模拟展示了Spring框架的核心概念——依赖注入。通过XML配置文件,我们可以声明bean及其依赖关系,使得Spring容器可以在运行时自动创建和管理这些对象,从而降低组件之间的耦合度,提高代码的可测试性...
在Spring框架中,依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)是核心概念,它们旨在简化组件之间的耦合,提高代码的可测试性和可维护性。IoC指的是应用程序的控制权由原本...
Spring框架是Java开发中不可或缺的一部分,它以其强大的依赖注入(Dependency...通过本文的介绍,相信你对Spring依赖注入有了更深入的理解。在实际开发中,灵活运用这些知识,可以让你的项目更加健壮、易于扩展和维护。
Spring的核心特性之一是依赖注入(Dependency Injection,简称DI),也称为控制反转(Inversion of Control,IoC)。在这个项目中,“基于java简单模拟实现spring_ioc”显然是为了帮助开发者理解Spring的IoC容器是...
Spring框架是Java开发中广泛应用的一个开源框架,以其依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)的核心特性,极大地简化了企业级应用的开发工作。"模拟Spring架构的...
总之,这个主题涵盖的内容非常广泛,包括了Spring的核心概念、IoC/DI的原理、容器的模拟实现以及可能涉及的开发工具。深入理解这些知识点对于任何使用Spring框架的开发者来说都至关重要,因为它能提升代码质量和可...
### 依赖注入相关解释 #### 一、Spring框架与依赖注入的重要性 在现代软件开发领域,...通过理解和掌握依赖注入的概念及其在Spring中的实现方式,开发者可以更好地利用Spring框架的优势,提升软件开发的质量和效率。