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的注入。

而不是有空指针错误。

时间: 2024-12-24 12:08:03

spring中反射机制和注入的使用的相关文章

Java中反射机制(Reflection)研究及源码演示

如下内容内容是关于 Java中反射机制(Reflection)研究及演示的内容. package com.jiangqq.reflection; import java.lang.reflect.Method; public class Reflection1 { public static void main(String[] args) throws Exception { Class<?> tClass = Class.forName("java.lang.Class"

Spring的反射机制和依赖注入

我们知道,Spring中大量使用了反射机制,那么究竟是什么地方使用了呢? spring的一大核心概念是注入, 但是,这存在的一个前提就是类是由spring管理起来的. 反射是根据className生成一个具体的实例, 这是一个很实用的思想. 比如:当我们需要根据传进来的参数的类型,选择具体的实现类时, 反射机制就能很好的解决问题. 然而,一般我们使用反射机制,创建的代理类是根据构造函数实例化的. 而不是从spring容器中注入 . 这样就会导致一个问题,无法在创建的代理类中实现注入功能. 当然,

Java 中反射机制的深入研究

昨天学习了java的反射机制,今天继续深入学习一下. 一.通过反射操作数组 反射不光只能用在类中,也可用在任意的引用数据类型上.当然包括数组. 通过java.lang.reflect.Array 类 可操作数组,java.lang.reflect.Array 类 下面提供了很多方法. 例如 public static Object get(Object array,int index)throws IllegalArgumentException,ArrayIndexOutOfBoundsExc

Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别(转)

一.Java的反射机制   每个Java程序执行前都必须经过编译.加载.连接.和初始化这几个阶段,后三个阶段如下图:  其中 i.加载是指将编译后的java类文件(也就是.class文件)中的二进制数据读入内存,并将其放在运行时数据区的方法区内,然后再堆区创建一个Java.lang.Class对象,用来封装类在方法区的数据结构.即加载后最终得到的是Class对象,并且更加值得注意的是:该Java.lang.Class对象是单实例的,无论这个类创建了多少个对象,他的Class对象时唯一的!!!!.

android中反射机制

本文介绍Android反射机制实现与原理,在介绍之前,要和Java进行比较,所以先看下Java中的反射相关知识: 一.反射的概念及在Java中的类反射 反射主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.在计算机科学领域,反射是一类应用,它们能够自描述和自控制.这类应用通过某种机制来实现对自己行为的描述和检测,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 在Java中的反射机制,被称为Reflection(大家看到这个单词,第一个想法应该就是去开发文档中

Java中反射机制详解

序言 在学习java基础时,由于学的不扎实,讲的实用性不强,就觉得没用,很多重要的知识就那样一笔带过了,像这个马上要讲的反射机制一样,当时学的时候就忽略了,到后来学习的知识中,很多东西动不动就用反射,所以回过头来把这个给重新补一下,自己欠下的债,迟早是要还的. ---WH 一.什么是反射? 在运行状态中,对于任意一个类,都能够获取到这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性(包括私有的方法和属性),这种动态获取的信息以及动态调用对象的方法的功能就称为java语言的

java中反射机制原理讲解

 反射,当时经常听他们说,自己也看过一些资料,也可能在设计模式中使用过,但是感觉对它没有一个较深入的了解,这次重新学习了一下,感觉还行吧! 一,先看一下反射的概念: 主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义. 反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接.但是反射使用不当会成本很高! 看概念很晕的,继续往下看. 二,反射机制的

关于spring中无法将service注入到servlet中的问题

首先,servlet是动态网页项目区别于普通的java项目的,是动态网页项目中web.xml主要配置文件管理的,而spring只能管理普通的pojo,而没办法直接注入,尽管你的注入方式和配置方式都没有问题.那如何解决这个问题呢?解决的办法总比遇到的问题多,不然spring MVC又是如何做到呢?其实filter也是会遇到类似问题的.个人建议使用第四种方式  第一种解决办法是: 在servlet中的init方法或者是无参构造方法内直接用最原始的方式进行手动注入,即类似如下:WebApplicati

Spring中Ioc容器的注入方式

1 通过setter方法注入 bean类: package com.test; public class UserServiceImplement implements IUserService { private IUserDao user; public IUserDao getUser() { return user; } public void setUser(IUserDao user) { this.user = user; } public void saveUser() { us