博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学习Spring 开发指南------基础语义
阅读量:2496 次
发布时间:2019-05-11

本文共 2801 字,大约阅读时间需要 9 分钟。

Dependency Injection

依赖注入的几种实现类型
Type1 接口注入
Type2 构造子注入
Type3 设值注入
几种依赖注入模式的对比总结

Spring Bean封装机制

Bean Wrapper
Bean Factory
ApplicationContext Web Context

[@more@]

Component组件

IoC,用白话来讲,就是由容器控制程序之间的关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。
依赖注入机制减轻了组件之间的依赖关系,同时也大大提高了组件的可移植性,这意味着,组件得到重用的机会将会更多。
依赖注入的几种实现类型
Type1 接口注入
常借助接口来将调用者与实现者分离。如:
public class ClassA
{
private InterfaceB clzB;
public init() {
Ojbect obj =
Class.forName(Config.BImplementation).newInstance();
clzB = (InterfaceB)obj;
}
}
Type2 构造子注入
通过构造函数完成依赖关系的设定
public class DIByConstructor
{
private final DataSource dataSource;
private final String message;

public DIByConstructor(DataSource ds, String msg)

{
this.dataSource = ds;
this.message = msg;
}
}
Type3 设值注入
即通过类的setter方法完成依赖关系的设置。

几种依赖注入模式的对比总结

接口注入模式因为具备侵入性,它要求组件必须与特定的接口相关联,因此并不被看好,实际使用有限。
Type2和Type3的依赖注入实现模式均具备无侵入性的特点。在笔者看来,这两种实现方式各有特点,也各具优势(一句经典废话)。

Spring Bean 封装机制----Bean Wrapper

Bean Factory
为了实现无侵入性的目标。Spring 大量引入了Java 的Reflection机制,通过动态调用的方式避免硬编码方式的约束,并在此基础上建立了其核心组件BeanFactory,以此作为其依赖注入机制的实现基础。
org.springframework.beans包中包括了这些核心组件的实现类,核心中的核心为BeanWrapper和BeanFactory类。

如果动态设置一个对象属性,可以借助Java的Reflection机制完成:

Class cls = Class.forName("net.xiaxin.beans.User");
Method mtd = cls.getMethod("setName",new Class[]{String.class});
Object obj = (Object)cls.newInstance();
mtd.invoke(obj,new Object[]{"Erica"});
return obj;
如何通过Spring BeanWrapper操作一个JavaBean:
Object obj = Class.forName("net.xiaxin.beans.User").newInstance();
BeanWrapper bw = new BeanWrapperImpl(obj);
bw.setPropertyValue("name", "Erica");
System.out.println("User name=>"+bw.getPropertyValue("name"));

Bean Factory,顾名思义,负责创建并维护Bean实例。
Bean Factory负责根据配置文件创建Bean实例,可以配置的项目有:
1.Bean属性值及依赖关系(对其他Bean的引用)
2.Bean创建模式(是否Singleton模式,即是否只针对指定类维持全局唯一的实例)
3.Bean初始化和销毁方法
4.Bean的依赖关系
Spring Bean Configuration Sample
id="TheAction" ⑴
class="net.xiaxin.spring.qs.UpperAction" ⑵
singleton="true" ⑶
init-method="init" ⑷
destroy-method="cleanup" ⑸
depends-on="ActionManager" ⑹
>
HeLLo ⑺
class="org.springframework.jndi.JndiObjectFactoryBean">
java:comp/env/jdbc/sample

InputStream is = new FileInputStream("bean.xml");
XmlBeanFactory factory = new XmlBeanFactory(is);
Action action = (Action) factory.getBean("TheAction");

ApplicationContext

BeanFactory提供了针对Java Bean的管理功能,而ApplicationContext提供了一个更为框架化的实现 ApplicationContext覆盖了BeanFactory的所有功能,并提供了更多的特性。此外,ApplicationContext为与现有应用框架相整合,提供了更为开放式的实现
如对于Web应用,我们可以在web.xml中对ApplicationContext进行配置.

Web Context

ApplicationContext通过编码加载。
对于Web应用,Spring提供了可配置的ApplicationContext加载机制。
加载器目前有两种选择:ContextLoaderListener和ContextLoaderServlet。
这两者在功能上完全等同,只是一个是基于Servlet2.3版本中新引入的Listener接口实现,而另一个基于Servlet接口实现。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/219138/viewspace-914323/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/219138/viewspace-914323/

你可能感兴趣的文章
Lock重入锁
查看>>
docker安装 rabbitMq
查看>>
git 常用命令 入门
查看>>
关闭selinx nginx无法使用代理
查看>>
shell 脚本部署项目
查看>>
spring cloud zuul网关上传大文件
查看>>
springboot+mybatis日志显示SQL
查看>>
工作流中文乱码问题解决
查看>>
maven打包本地依赖包
查看>>
spring boot jpa 实现拦截器
查看>>
jenkins + maven+ gitlab 自动化部署
查看>>
Pull Request流程
查看>>
Lambda 表达式
查看>>
函数式数据处理(一)--流
查看>>
java 流使用
查看>>
java 用流收集数据
查看>>
java并行流
查看>>
CompletableFuture 组合式异步编程
查看>>
mysql查询某一个字段是否包含中文字符
查看>>
Java中equals和==的区别
查看>>