spring 注解的总结

时间:2024-12-15 09:04:39

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