Springc常用注解详解

1.@Component
作用:用于声明一个spring的组件。组件及spring容器中的bean,即一个实例。
声明格式:
@Target(ElementType.TYPE) :表明该注解可以用在什么地方。 ElementType.TYPE:该注解可以用在类上
@Retention(RetentionPolicy.RUNTIME) 该注解是在运行阶段有效
@Documented
public @interface Component {

        /**
        * The value may indicate a suggestion for a logical component name,
        * to be turned into a Spring bean in case of an autodetected component.
        * @return the suggested component name, if any (or empty String otherwise)
        */
        String value() default "";  ->可以用于对该Component进行命名,一般情况下default都可以省略,省略的话即为value值,
    }
用法:@Component(value="abc") @Component("abc")

2,@Repository
作用:用于声明一个spring的数据访问层组件。
声明格式:
@Target({ElementType.TYPE}) :表明该注解可以用在类上
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component :Repository被Component修饰,表明该注解同Component一样,为spring的一个组件
public @interface Repository {

        /**
        * The value may indicate a suggestion for a logical component name,
        * to be turned into a Spring bean in case of an autodetected component.
        * @return the suggested component name, if any (or empty String otherwise)
        */
        String value() default "";  ->可以用于对该Repository进行命名,一般情况下default都可以省略,省略的话即为value值,
    }
用法:@Repository("aaa") @Repository(value="aaa")

3,@Service
作用:用于声明一个spring的业务处理层组件。
声明格式:
@Target({ElementType.TYPE}) :表明该注解可以用在类上
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component :Service被Component修饰,表明该注解同Component一样,为spring的一个组件
public @interface Service {

        /**
        * The value may indicate a suggestion for a logical component name,
        * to be turned into a Spring bean in case of an autodetected component.
        * @return the suggested component name, if any (or empty String otherwise)
        */
        String value() default "";

    }
用法:@Service(value="aaaService") @Service("aaaService")

4,@Configuration
作用:用于声明一个spring的配置类。
声明格式:
@Target(ElementType.TYPE) :表明该注解可以用在类上
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component :Configuration被Component修饰,表明该注解同Component一样,为spring的一个组件
public @interface Configuration {

        /**
        * Explicitly specify the name of the Spring bean definition associated
        * with this Configuration class. If left unspecified (the common case),
        * a bean name will be automatically generated.
        * 

The custom name applies only if the Configuration class is picked up via * component scanning or supplied directly to a {@link AnnotationConfigApplicationContext}. * If the Configuration class is registered as a traditional XML bean definition, * the name/id of the bean element will take precedence. * @return the suggested component name, if any (or empty String otherwise) * @see org.springframework.beans.factory.support.DefaultBeanNameGenerator */ String value() default ""; }

5,@ComponentScan
作用:用于指定spring容器扫描的包或类
声明格式:
……
用法:
@AliasFor(“basePackages”) 同basePackges
String[] value() default {};

                                         value属性同basePackages作用一样,用于指定要扫描的包,包可以包含多个。

        @AliasFor("value")  同value
        String[] basePackages() default {};

        Class[] basePackageClasses() default {};     :用于指定扫描的类,可以指定多个

        Filter[] includeFilters() default {};    :用于告诉spring容器将要去扫描的注解,即扫描includeFilters指定的注解,该注解可以包含多个

        Filter[] excludeFilters() default {};    :用于告诉spring容器将要排除扫描的注解,即排除excludeFilters指定的注解,该注解可以包含多个

6,@Qualifier
作用:用于限定一个spring容器中bean的标识,以便在自动注入的时候,使用限定的bean进行注入
该注解配合Autowired使用
声明格式:

    @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    @Target表明了该注解可以用在什么地方 ->该注解可以用在属性、方法、参数、类、注解类
    @Retention(RetentionPolicy.RUNTIME)
    @Inherited
    @Documented
    public @interface Qualifier {
        String value() default "";
    }

用法:
    @Qualifier(“xxx")  @Qualifier(value="xxx")

7,@Autowired ->效果等同于原生的java注解 @Resource,该注解可以直接指定限定的bean
作用:构造器、属性、set方法、config 方法可以通过spring的依赖注入进行自动装配.该注解可以配合@Qualifier自动装配限定的bean.
如果要装配限定的bean的话,得使用@Qualifier。该限定的bean可以被@Qualifier来指定,也可以被@Component、@Repository、@Service …等注解的value属性来指定
声明格式:
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
-> 该注解可以用在构造器、方法、参数、属性、注解
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {

            /**
            * Declares whether the annotated dependency is required.
            * 

Defaults to {@code true}. */ boolean required() default true; :表明该注解标注的域必须得被装配 ,默认情况下,该注解标注的域必须得被装配 } 用法:@Autowired->必须得装配 @Autowired(required=false)->可不装配或可装配

8,@PropertySource
作用:用于将properties {(xml、text、yml、grovvy)有待举证}的配置文件导入到spring容器中
声明格式:
@Target(ElementType.TYPE) ->只能用在类上面
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(PropertySources.class)
public @interface PropertySource {

        ...
        String[] value();   :用于指定配置文件的路径,可以有多个
        ...
        String encoding() default "";  :用于指定编码格式
    }

9,@ImportResource
作用:用于将xml、grovvy配置文件导入到spring容器中
声明格式:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface ImportResource {

        @AliasFor("locations")
        String[] value() default {};      
                                ===》指定配置文件的位置
        @AliasFor("value")
        String[] locations() default {};
    }
用法:
    @ImportResource("classpath:/com/acme/properties-config.xml")

10,@Profile
作用:用于指定bean的使用环境,一般用于数据源,也可以用于控制其他bean的生成
声明格式:
@Target({ElementType.TYPE, ElementType.METHOD}) ->用于类或是方法上
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Conditional(ProfileCondition.class)
public @interface Profile {

        /**
        * The set of profiles for which the annotated component should be registered.
        */
        String[] value();   ->用于指定bean的环境名称

    }

用法:@Profile("dev") @Profile("prod")

11,@ActiveProfiles
作用:用于记过@Profile标明的环境
声明格式:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface ActiveProfiles {
@AliasFor(“profiles”)
String[] value() default {};

        @AliasFor("value")
        String[] profiles() default {};

        Class resolver() default ActiveProfilesResolver.class;

        boolean inheritProfiles() default true;
    }
用法:
    @ActiveProfiles("dev") @ActiveProfiles("online")

12,@ContextConfiguration
作用:用于指定spring容器加载的配置文件或配置类
声明格式:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface ContextConfiguration {
@AliasFor(“locations”)
String[] value() default {};
======》用于指定配置文件的路径
@AliasFor(“value”)
String[] locations() default {};

        Class[] classes() default {};  -> 用于指定加载的配置类 可以用多个
    }    
用法:
    @ContextConfiguration(classes = DataSourceConfig.class)
    @ContextConfiguration(locations="/app-config.xml")

13,@Bean
作用:使用java的方式声明一个bean
声明格式:
@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) ->可以用在方法上火是注解上
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Bean {

        @AliasFor("name")
        String[] value() default {};
                        =====>用于指定bean的名字
        @AliasFor("value")
        String[] name() default {};

        Autowire autowire() default Autowire.NO;

        String initMethod() default "";   --->用户指定该bean的初始化方法 

        String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;   ---->用于指定该bean的销毁方法

    }
用法:
    @Bean(name = "aaa",initMethod="init",destroyMethod="destroy")

14,@value
作用:用于指定属性、方法、参数、注解的值,可以直接指定为字面量{@Value(“abc”)}或可以通过占位符的形式获取配置文件的属性值或者通过spel表达式获取属性值
声明格式:
@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Value {

        /**
        * The actual value expression: e.g. "#{systemProperties.myProp}".
        */
        String value();

    }
用法:字面量                           占位符                                 spel表达式
    @Value("abc")                @Value("${jdbc.driver})                #{systemProperties.myProp}
    String name;                 String jdbcDriver;                     String prop;

你可能感兴趣的:(spring注解)