spring 注解的总结

一、java内置注解

     1、@Target 表示该注解用于什么地方,可能的 ElemenetType 参数包括:

              ElemenetType.CONSTRUCTOR   构造器声明

              ElemenetType.FIELD   域声明(包括 enum 实例)

              ElemenetType.LOCAL_VARIABLE   局部变量声明 

              ElemenetType.METHOD   方法声明

              ElemenetType.PACKAGE   包声明

              ElemenetType.PARAMETER   参数声明

              ElemenetType.TYPE   类,接口(包括注解类型)或enum声明

     2、@Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括:

             RetentionPolicy.SOURCE   注解将被编译器丢弃

             RetentionPolicy.CLASS   注解在class文件中可用,但会被VM丢弃

             RetentionPolicy.RUNTIME   VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息。

     3、@Documented 将此注解包含在 javadoc 中
     4、@Inherited 允许子类继承父类中的注解
     5、@Deprecated  表示当前元素是不赞成使用的。
     6、@Override  表示当前方法是覆盖父类的方法。
     7、@SuppressWarnings  表示关闭一些不当的编译器警告信息。

二、Spring内置注解

     1、@Autowired注解

          采用byType的方法自动装配。可以应用在类的成员变量、成员方法和构造子。默认情况下使用@Autowired注解进行自动注入时,Spring容器中匹配的候选Bean数目必须有且仅有一个。可以设置required=false让其成为可选的。当存在多个类型一致的bean时,可以用@Qualifier注解来明确指定要装配的bean。

     2、@Qualifier注解

           @Qualifier("Bean的名称")  指定注入Bean的名称。只能用于类的成员变量、方法的参数和构造子的参数。如果它与@Autowired联合使用,则自动装配的策略就变为byName了。

     注解使用范例:

public class Person {
    private Long id;
    private String name;
    private Address address;
    
    public Person(){
        
    }
    
    public Person(Long id, String name){
        this.id = id;
        this.name = name;
    }

    @Autowired(required=false)
    public void setAddress(@Qualifier("address2")Address address) {
        this.address = address;
    }
}
<!-- 通过注解定义bean。默认同时也通过注解自动注入 -->
<context:component-scan base-package="com.cjm"/>

<bean id="address1" class="com.cjm.model.Address" p:city="gz1" p:zipCode="111"/>
<bean id="address2" class="com.cjm.model.Address" p:city="gz2" p:zipCode="222"/>

<bean id="person" class="com.cjm.model.Person">
    <constructor-arg index="0" value="111"/>
    <constructor-arg index="1" value="cjm"/>
</bean>

 自定义限定符注解:

@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface MyQulifier {
    String value();
}
public class Person {
    private Long id;
    private String name;
    private Address address;
    
    public Person(){
        
    }
    
    public Person(Long id, String name){
        this.id = id;
        this.name = name;
    }

    @Autowired
    public void setAddress(@MyQulifier("a2")Address address) {
        this.address = address;
    }
}
<bean id="address1" class="com.cjm.model.Address" p:city="gz1" p:zipCode="111">
    <qualifier type="com.cjm.annotation.MyQulifier" value="a1"/>
</bean>

<bean id="address2" class="com.cjm.model.Address" p:city="gz2" p:zipCode="222">
    <qualifier type="com.cjm.annotation.MyQulifier" value="a2"/>
</bean>

 3、@Component注解

          @Component("Bean的名称")  通过注解标注一个类为受管Bean。默认情况下通过@Component定义的Bean都是singleton的,如果需要使用其它作用范围的Bean,可以通过@Scope注释来达到目标。

     4、@Scope注解

          @Scope("Bean的作用范围")  通过@Scope注解为受管指定作用域。BeanBean的作用范围有:singleton、prototype等。

     5、@Controller注解

     6、@Service注解

     7、@Repository注解

三、JSR-250规范的注解(需要common-annotations.jar包的支持)

     1、@Resource注解

          @Resource(name="person")  name属性用于指定注入的Bean的名称。

          @Resource(type=Person.class)  type属性用于指定注入的Bean的类型。

     2、@PostContsuct注解

          用于指定受管Bean的初始化方法,作用与Bean的init-method属性类似。

     3、@PreDestory注解

          用于指定受管Bean的析构方法,作用与Bean的destory-method属性类似。

四、AspectJ内置注解

原文地址:https://www.cnblogs.com/damowang/p/4305101.html