表示我们的注解用在什么地方 ,ElementType(枚举)为参数。
ElementType枚举
TYPE表示类级别 FIELD字段声明(包括枚举常量)级别 METHOD方法级别 PARAMETER参数级别 CONSTRUCTOR构造函数级别 LOCAL_VARIABLE局部变量级别 ANNOTATION_TYPE注释类型 PACKAGE包声明 TYPE_PARAMETER类型参数1.8TYPE_USE使用类型1.8
表示我们注解在什么地方有效,如果定义runtime则在class和source有效。
RUNTIME>CLASS>SOURCE
RetentionPolicy枚举SOURCE源码级别CLASS类级别RUNTIME运行时(一般情况下都是用这个)表示是否将注解生成在javadoc(文档)中
表示子类可以继承父类的注解
当一个接口拥有不同的实现类时,使用@Autowired注解时会报
org.springframework.beans.factory.NoUniqueBeanDefinitionException
方案1:使用@Qualifier注解,选择一个对象的名称,通常比较常用
方案2: @Primary可以理解为默认优先选择,同时不可以同时设置多个,内部实质是设置BeanDefinition的primary属性。
Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
SpringIOC 容器管理一个或者多个bean,这些bean都需要在@Configuration注解下进行创建,在一个方法上使用@Bean注解就表明这个方法需要交给Spring进行管理。
用@Configuration注释 @Bean 注解的方法都会被动态代理,因此调用该方法返回的都是同一个实例。
@Component就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
简单来讲就是,若某类或某方法加上该注解之后,表示此方法或类不再建议使用,调用时也会出现删除线,但并不代表不能用,只是说,不推荐使用,因为还有更好的方法可以调用。
@Scope默认是单例模式,即scope="singleton"。
另外scope还有prototype、request、session、global session作用域。scope="prototype"多例
1.singleton单例模式,
全局有且仅有一个实例
2.prototype原型模式,
每次获取Bean的时候会有一个新的实例
3.request
request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效,
4.session
session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
5.global session
global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么web会自动当成session类型来使用。
方法前执行验证
方法后执行验证