Spring 模式注解装配
- 模式注解是一种用于声明在应用中扮演“组件”角色的注解。如 Spring Framework 中的 @Repository 标注在任何类上
,用 于扮演仓储角色的模式注解。 - @Component 作为一种由 Spring 容器托管的通用模式组件,任何被 @Component 标准的组件均为组件扫描的候选对象。类
似地,凡是被 @Component 元标注(meta-annotated)的注解,如 @Service
,当任何组件标注它时,也被视作组件扫 描的候选对象
注解的派生性
@Component 注解
@Repository 注解 继承了 @Component注解 并且 属性方法 保持一致
就可以说 是 @Component派生了 @Repository
@AliasFor(annotation = Component.class)
String value() default "";
注解层次性
而自定义的注解又继承了 @Repository注解 并且保持有同样的属性方法
这样 从@Component 注解到 @Repository 下面一层层的 就是 注解的 “层次性” 就像java里面的继承 但在java实际编程语言中 是注释没有派生的 。
注解的派生性 可以使得 扫描注解时派生自定义派生注解也会变成扫描对象。
//标记后Spring 会把它当成一个bean 扫描进上下文 value 是bean的名字
@FirstLevelRepository(value="myFirstLevelRepository")//bean的名称
public class MyFirstLevelRepository {
}
/**
* Created by caomaoboy 2019-11-11
**/
//启动引导类
@ComponentScan("com.qjx.divinspringboot.repository")
public class RepositoryBootstrap {
public static void main(String[] args) {
//得到Spring上下文的对象
ConfigurableApplicationContext context = new SpringApplicationBuilder(RepositoryBootstrap.class).web(WebApplicationType.NONE).run(args);
//从上下文对象中以bean的名字去取
MyFirstLevelRepository myFirstLevelRespository = context.getBean("myFirstLevelRepository",MyFirstLevelRepository.class);
//查看bean
System.out.println("myFirstLevelRepository" + myFirstLevelRespository);
//关闭上下文
context.close();
}
}
同时如果用@Component 来 注解bean 效果也是一样的
//标记后Spring 会把它当成一个bean 扫描进上下文 value 是bean的名字
@Component(value="myFirstLevelRepository")//bean的名称
public class MyFirstLevelRepository {
}