zoukankan      html  css  js  c++  java
  • spring @Autowired注入的原理

    只知道如何用Autowired注解,知道可以替代set,get方法,很方便,却一直不知道,为什么可以代替

    今天探索一下原因,所谓知其然还要知其所以然,才能理解的更好,记忆的更牢,才能转化为自己的知识。

    这都是利用了java的注解原理:

    如下:

    1.先定义一个注解

    1 /** 
    2  * @author jing.ming
    3  * @version 创建时间:2015年11月3日 上午9:35:03 
    4  * 声明一个注解
    5  */
    6 @Retention(RetentionPolicy.RUNTIME)
    7 public @interface TestAnno {
    8 
    9 }

    2.定义一个类

     1 /** 
     2  * @author jing.ming
     3  * @version 创建时间:2015年11月3日 上午9:37:34 
     4  * 程序的简单说明 
     5  */
     6 public class TestAnnotation {
     7 
     8     @TestAnno
     9     private String a ;
    10     
    11     public String getA(){
    12         return a ;
    13     }
    14     public void setA(String a){
    15         this.a = a ;
    16     }
    17 }

    3.通过反射为上面的类赋值

     1 /** 
     2  * @author jing.ming
     3  * @version 创建时间:2015年11月3日 上午9:39:47 
     4  * 通过反射为a赋值
     5  */
     6 public class MainReflectTest {
     7 
     8     public static void main(String[] args) {
     9         TestAnnotation ta = new TestAnnotation() ;
    10         Field[] fs = TestAnnotation.class.getDeclaredFields();
    11         for(int i=0;i<fs.length;i++){
    12             if(fs[i].isAnnotationPresent(TestAnno.class)){
    13                 fs[i].setAccessible(true);
    14                 try {
    15                     fs[i].set(ta, "Hello World");
    16                 } catch (IllegalArgumentException e) {
    17                     e.printStackTrace();
    18                 } catch (IllegalAccessException e) {
    19                     e.printStackTrace();
    20                 }
    21             }
    22         }
    23  
    24         System.out.println(ta.getA());
    25     }
    26 
    27 }

    关键是fs[i].setAccessible(true);这个方法,如果不设置这个方法则会抛出java.lang.IllegalAccessException的异常。网上也有人说setAccessible有安全性限制不要随便乱用。不过至少可以做到.

    这里有一个详细的讲解:

    http://swiftlet.net/archives/734

  • 相关阅读:
    javascript中new Date()的浏览器兼容性问题
    js 时间格式化
    HTML5 JS实现搜索匹配功能
    PHP中preg_match正则匹配的/u /i /s是什么意思
    微信开放接口获取用户昵称保存到MySQL中为空白
    linux下源码安装软件
    格式化MYSQL时间戳函数FROM_UNIXTIME
    Zabbix-proxy安装部署
    使用ss命令对tcp连接数和状态的监控性能优化
    Zabbix使用netstat监控会话
  • 原文地址:https://www.cnblogs.com/jsStudyjj/p/4932248.html
Copyright © 2011-2022 走看看