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 extends ActiveProfilesResolver> 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;