spring中反射机制和注入的使用
http://www.cnblogs.com/andin/archive/2011/04/30/spring.html spring的一大核心概念是注入,
但是,这存在的一个前提就是类是由spring管理起来的。
反射是根据className生成一个具体的实例,
这是一个很实用的思想。
比如:当我们需要根据传进来的参数的类型,选择具体的实现类时,
反射机制就能很好的解决问题。
然而,一般我们使用反射机制,创建的代理类是根据构造函数实例化的。
而不是从spring容器中注入 。
这样就会导致一个问题,无法在创建的代理类中实现注入功能。
当然,如果你一定要使用的话,系统会提示空指针错误。
这个时候,如果把反射创建的类由spring注入就可以有效的解决这个问题 。
这样也存在一个问题。
就是获得spring的ApplicationContext.
如果我们重新获得一遍的话,
这样就是对系统资源极大的浪费。
这样我们可以声明一个静态变量将ApplicationContext保存起来
// 声明一个静态变量保存
public void setApplicationContext(ApplicationContext contex)
throws BeansException {
MyApplicationContextUtil.context = contex;
}
并将其用spring容器管理起来。
这样的话,我们就可以很轻松的获得ApplicationContext,而不需要消耗太多的系统资源。
从而,很简单的,
当我们的实现类全部继承一个相同的接口时,
我们的接口便可以通过反射初始化。
从而,创建不同的具体实现类。
同时,因为所有的类都是通过spring管理起来的。
很明显,在创建的实现类中也是可以使用spring的注入。
而不是有空指针错误。
spring中反射机制和注入的使用的更多相关文章
- .NET中反射机制的使用与分析
.NET中反射机制的使用与分析 [日期:2008-06-30] 来源: 作者:志伟 .NET反射的定义:审查元数据并收集关于它的类型信息的能力. 元数据是一种二进制信息,用以对存储在公共语言 ...
- Spring的反射机制和依赖注入
我们知道,Spring中大量使用了反射机制,那么究竟是什么地方使用了呢? spring的一大核心概念是注入, 但是,这存在的一个前提就是类是由spring管理起来的. 反射是根据className生成 ...
- [置顶] Spring中DI设置器注入
Java的反射机制可以说是在Spring中发挥的淋漓尽致,下面要看的代码就是通过反射机制来实现向一个类注入其实际依赖的类型,这个过程的实现会交由Spring容器来帮我们完成. JavaBean中针对属 ...
- Spring的核心机制——依赖注入(Dependency Inject)
Spring不仅提供对象,还提供对象的属性值,而不是由使用该对象的程序所提供的. Java应用是由一些相互协作的对象所组成的,在Spring中这种相互协作的关系就叫依赖关系. 如果A组件调用了B组件的 ...
- spring中bean配置和注入场景分析
bean与spring容器的关系 Bean配置信息定义了Bean的实现及依赖关系,Spring容器根据各种形式的Bean配置信息在容器内部建立Bean定义注册表,然后根据注册表加载.实例化Bean,并 ...
- Spring的核心机制——依赖注入(Dependency Inject)
Spring不仅提供对象,还提供对象的属性值,而不是由使用该对象的程序所提供的. Java应用是由一些相互协作的对象所组成的,在Spring中这种相互协作的关系就叫依赖关系. 如果A组件调用了B组件的 ...
- Spring的核心机制依赖注入
原文地址:http://developer.51cto.com/art/200610/33311.htm 本文主要讲解依赖注入(设值注入.构造注入),作用是可以使Spring将各层的对象以松耦合的方式 ...
- 在 .NET 4.5 中反射机制的变更
反射机制(Reflection)通常会涉及到3中场景: 运行时反射 场景:可以检索已加载程序集.类型.对象.实例和方法调用的元数据(Metadata). .NET 支持情况:支持 仅供静态分析的反射 ...
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
一.Java的反射机制 每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图: 其中
随机推荐
- PHP文件操作函数
1 获得文件名: basename(); 给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被去掉. eg: 复制代码 代码如下: ...
- 【互动问答分享】第8期决胜云计算大数据时代Spark亚太研究院公益大讲堂
“决胜云计算大数据时代” Spark亚太研究院100期公益大讲堂 [第8期互动问答分享] Q1:spark线上用什么版本好? 建议从最低使用的Spark 1.0.0版本,Spark在1.0.0开始核心 ...
- HDU 1061.Rightmost Digit-规律题 or 快速幂取模
Rightmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- Codeforces #447 Div2 D
#447 Div2 D 题意 给一棵完全二叉树,每条边有权值为两点间的距离,每次询问 \(x, h\) ,从结点 \(x\) 出发到某一结点的最短路的距离 \(d\) 如果小于 \(h\) ,则答案加 ...
- java中的JDBC
Java 是通过 JDBC 技术实现对各种数据库访问的,换句话说,JDBC 充当了 Java 应用程 序与各种不同数据库之间进行对话的媒介. JDBC 是 Java 数据库连接(Java DataBa ...
- elasticsearch将数据导出json文件【使用elasticdump】
1.前提准备 需要使用npm安装,还未安装的朋友可以阅读另一篇我的博客<安装使用npm>,windows环境. 2.安装es-dump 打开终端窗口PowerShell或者cmd. 输入命 ...
- golang垃圾回收
常见GC算法 我总结了一下常见的 GC 算法.分别是:引用计数法.Mark-Sweep法.三色标记法.分代收集法. 1. 引用计数法 原理是在每个对象内部维护一个整数值,叫做这个对象的引用计数,当对象 ...
- iOS开发——随机数的使用
1).arc4random() 比较精确不需要生成随即种子 使用方法 : 通过arc4random() 获取0到x-1之间的整数的代码如下: ...
- Maven设置snapshot无法在远程仓库下载的问题解决
检查步骤如下: 1.检查nexus是否纳入public版本中: 2.配置中是否启用snapshots功能.以下方法两种设置都可以,任选一个即可. 一种是在项目pom.xml使用: <reposi ...
- ThinkPHP模板中JS等带花括号处会被解析错误的解决办法
如下图,当本人在ThinkPHP框架的模板中写jQuery代码的时候,写了一些注释,并且注重是斜线和换括号{是连着一起的,这层语法上来时是没问题的,但是在ThinkPHP 的模板引擎解析下,会被解析掉 ...