关于注解的总结

一、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内置注解

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值