从java注解 到spring注解的学习

从java注解 到spring注解的学习

1.java注解简单理解例子

  注解类

package com.jhuc.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Myanno {
   public String name() default "kk";
   public String age();
}

  

package com.jhuc.annotation;

public class Source {
   @Myanno(age = "1111") 
  public void sayhaha(){};
}

 

package com.jhuc.annotation;

import java.lang.reflect.Method;

public class Client{
public static void main(String[] args) throws SecurityException, NoSuchMethodException {
    Method method= Source.class.getDeclaredMethod("sayhaha");
    if(method.isAnnotationPresent(Myanno.class)){
      Myanno m=method.getAnnotation(Myanno.class);
      System.out.println(m.name());
      System.out.println(m.age());
    }
}

}

  测试结果:

 kk

1111

 

注解就是在一个类 或者方法 或者属性上标示下,然后这个类的反射Class中,会有这个注解的记录,可以获得这个注解,就可以做相应的动作

所以 注解可以用在哪个上面,方法 类 属性? 由@Target(ElementType.METHOD)决定

注解何时起作用,@Retention(RetentionPolicy.RUNTIME)决定

如果注解的属性不想必填,就可以写一个default值

 

 Spring 注解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
	xsi:schemaLocation="http://www.springframework.org/schema/beans  
		http://www.springframework.org/schema/beans/spring-beans.xsd  
		http://code.alibabatech.com/schema/dubbo  
		http://code.alibabatech.com/schema/dubbo/dubbo.xsd" >
	 <bean id="helloWorld" class="com.jhuc.annotation.HelloWorld">
     </bean>
      <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
    <bean id="bean1"  class="com.jhuc.annotation.Bean1">
        <property name="name" value="luce1"/>
    </bean> 
    <bean id="bean2"  class="com.jhuc.annotation.Bean2">
        <property name="name" value="luce2"/>
        <property name="age" value="18"/>
    </bean> 
</beans> 

 

package com.jhuc.annotation;

import org.springframework.beans.factory.annotation.Autowired;


public class HelloWorld {
    @Autowired
    private Bean1 bean1;
    @Autowired
    private Bean2 bean2;
    public String toString() {
        return "bean1:" + bean1.getName() +"\n" + "bean2:" + bean2.getAge()+bean2.getName();
    }
}

 

在一个个创建bean时,AbstractAutowireCapableBeanFactory中的populateBean方法中



 
在解析属性时,回去load出该类class所拥有的方法和属性注解到一个集合里面

如果集合不为空,则进行注解属性赋值



 


 
 
 

猜你喜欢

转载自cainiaoboke.iteye.com/blog/2328071