`
ericxu131
  • 浏览: 188363 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

反射+annotation模拟spring2.5的@Autowired标签访问private变量

阅读更多
这段时间用了一下spring 2.5的@Autowired注释来做依赖注入,感觉真的不错,省掉了get、set的方法,整个类也看起来更加舒服了。
在这期间对于@Autowired注释访问private的变量一直感到很好奇,查了一下相关资料,写了一个小例子。不过没看过@Autowired的源码,不确定是不是这样做的,应该差不多吧。
代码如下:

1.声明了一个注释
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnno {
	
}


2.声明了一个含有private变量a的类
public class TestAnnotation {
	@TestAnno
	private String a;

	public String getA() {
		return a;
	}

	public void setA(String a) {
		this.a = a;
	}

}


3.通过反射为a赋值
public class MainTest {
	public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
		TestAnnotation ta=new TestAnnotation();
		Field[] fs=TestAnnotation.class.getDeclaredFields();
		for(int i=0;i<fs.length;i++){
			if(fs[i].isAnnotationPresent(TestAnno.class)){
				fs[i].setAccessible(true);
				fs[i].set(ta, "你好");
			}
		}
		System.out.println(ta.getA());
	}
}

关键是fs[i].setAccessible(true);这个方法,如果不设置这个方法则会抛出java.lang.IllegalAccessException的异常。网上也有人说setAccessible有安全性限制不要随便乱用。不过至少可以做到
分享到:
评论
1 楼 jakoes 2009-07-24  
最好赋一下源码

相关推荐

    spring annotation注解

    Spring Annotation 注解 Spring 框架中的注解是用于在 Java 类中添加元数据的,通过这些元数据,Spring 框架可以在运行时提供更多的功能。 Spring 框架提供了多种类型的注解,例如 @Autowired、@Resource、@...

    基于Spring@Autowired注解与自动装配详谈

    在Spring 2.5中引入了@Autowired注解,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。使用@Autowired可以消除set、get方法,从而简化程序的开发。 在使用@Autowired时,需要在...

    spring中Autowired和Qulifier注解

    在Spring框架中,`@Autowired`和`@Qualifier`注解是两个非常重要的依赖注入...通过阅读和分析`spring_0900_IOC_Annotation_Autowired_Qulifier`中的源码和示例,可以更深入地理解它们的实现细节和使用技巧。

    javaSpring注解入门[参考].pdf

    Java Spring注解入门 Java Spring框架中,注解是一种非常重要的概念,它可以帮助我们简化配置文件的编写,并提高代码的可读性和维护性。在本节中,我们将学习如何使用Spring注解来实现属性的自动装配。 1. 使用...

    spring基础

    Spring 2.5 引入了 @Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 @Autowired 按照类型来装配 改变如下: package com.baobaotao; import org.springframework.beans....

    spring注解说明文档

    在类的成员变量上使用`@Autowired`,Spring容器会在运行时自动找到合适的依赖并注入。例如,在`UserManagerImpl`类中,我们可以通过如下方式声明`UserDao`的依赖: ```java public class UserManagerImpl ...

    Spring如何注入Date类型的变量

    在Spring框架中,注入Date类型的变量是一个常见的需求,特别是在处理日期和时间相关的业务逻辑时。这篇博客将探讨如何在Spring中有效地注入Date对象到bean的属性中。首先,我们需要了解Spring依赖注入的基本概念,它...

    spring annotation example

    在Spring框架中,注解(Annotation)是一种元数据,它提供了简化配置、增强代码可读性和减少XML配置文件的方法。本示例将深入探讨如何在Java Maven项目中使用Spring注解进行开发。 首先,让我们了解Spring的核心...

    Spring整合Junit框架进行单元测试Demo

    import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; @ContextConfiguration(locations = {"classpath:spring-context.xml"}) public...

    详解Java的Spring框架中的注解的用法

    【Java Spring注解详解】 在Java的Spring框架中,注解的使用极大地简化了配置,提高了开发效率。本文将深入探讨Spring注解的用法,特别是如何利用注解来注入属性。 1. **使用Spring注解注入属性** 在Spring框架...

    [springBoot系列]--springBoot注解大全.pdf

    示例代码:@Componentpublic class UserService { @Autowired private UserRepository userRepository;}@PathVariable:用于从请求的 URI 中获取参数,这些参数在 URI 中用大括号 {} 包裹。例如:/api/users/{id},...

    spring famework 基于注解配置示例

    然而,随着注解(Annotation)技术的发展,Spring框架引入了基于注解的配置,使得代码更加简洁、直观。本示例将详细介绍如何使用注解配置实现Spring框架的注入。 首先,我们需要了解几个关键的注解: 1. `@...

    spring boot 连接thymeleaf的很简单的Demo

    import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation....

    SpringBoot整合hive-jdbc示例

    import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @Service public class HiveJdbcClient {...

    spring切换数据源样例代码

    在IT行业中,Spring框架是Java开发中的核心工具,尤其在企业级应用开发中扮演着重要角色。本示例代码着重于“spring切换数据源”,这是一个关键功能,特别是在处理多个数据库或者需要分离读写操作的场景下。多数据源...

    spring学习笔记(四)

    当我们关注源码时,可以发现`@Value`的处理主要由`org.springframework.beans.factory.annotation.ValueAnnotationBeanPostProcessor`完成。这个类是Spring的一个Bean后处理器,它会在Bean实例化之后,查找并处理`@...

    Idea创建SpringBoot项目整合Hibernate.zip

    import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @...

    使用springMail发送带附件的email

    import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.MailException; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail....

    Spring中如何动态注入Bean实例教程

    Spring 中如何动态注入 Bean 实例教程 Spring 框架中提供了多种方式来注入 Bean 实例,但是在实际项目中,基于动态的方式来提取 Spring 管理的 Bean 是非常有价值的。本文将详细介绍动态注入 Bean 实例的方式和...

Global site tag (gtag.js) - Google Analytics