# spring-01-di **Repository Path**: stevenye/spring-01-di ## Basic Information - **Project Name**: spring-01-di - **Description**: spring框架学习之基础篇-依赖注入[Dependency Inject] - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-01-05 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring framework 中依赖注入 相关的流程和注解以及代码 ## 流程 ### 编写任意的java类型,都可以通过 DI 进行注入 ## 相关的注解 ### @Configuration 打上此注解的类将来可以通过 AnnotationConfigApplicationContext 来解析和处理,相当于 applicationContext.xml 文件 > 代码引用 * ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); * XXXBean bean = (XXXBean)ac.getBean("xxx"); ### @ComponentScan 打上此注解表示会去扫描指定包及其子包下的所有添加了 @Component 相关注解的类型, 类似于@Component 注解有: * @Bean 表明是一个 bean ,相当于在 xml 中的配置的 <bean /> * @Controller 表明是一个控制器 bean * @Service 表示是是业务逻辑层的 bean * @Repository 表示是持久层的 bean * @Advice 表示是通知的组件 bean ### @Lazy 用在类名上方,指定该对象是懒加载 ### @Primary 当有多个子类继承某个父类类型,而目标是要注入父类类型,那该如何从众多的子类中选一个呢,此注解加大子类被选中的机会 ### @Scope 用在类名上方,指定该对象是何种模式 (单例/原型) > 代码引用 * @Scope(value="singleton") * @Scope(value="prototype") ### @PostConstruct 使用注解配置时,需要注入一些属性值,可以通过编程式的方式来完成,就可以使用此 注解, 加了此注解的方法将在构造方法之后被调用 > 代码引用 @PostConstruct private void postInit() { //do something init ... } ### @Autowire 自动注入 注解,当你想要注入某个对象时,在这个对象的上面使用此注解,支持属性、构造、方法 注入 > 这个注解在注入集合类型的对象时,是根据集合元素的类型进行匹配和搜索的,而不是直接按集合本身做为bean来搜索 ### @Qualifier 用来限定要注入的Bean的名字, 一般配合 @Autowire 注解使用 ### @Resource 功能同 @Autowire,是JAVAEE规范中的注解,从容器中查找依赖,并自动注入 > 这个注解可以按集合本身的类进行查询,也可以按集合元素的类型进行查询. 如果通过名字[byName]可以匹配成功,则直接注入, > 如果名字不能匹配成功,则根据集合类型进行匹配,可以通过 type 属性来指定类型。如果这个类型有多个Bean满足,也将抛出异常. > 如果名字和集合类型都不能匹配,则会尝试根据集合元素的类型进行匹配注入。如果还没有找到,则抛出异常 ## 测试相关的注解 ### @ContextConfiguration 在测试类中去读取 注解配置类或applicationContext.xml文件 > @ContextConfiguration(classes=AppConfig.class) 或 > @ContextConfiguration("classpath:applicationContext.xml") > 注:这样做时,你的测试类需要继承 AbstractTestNGSpringContextTests 或 AbstractJUnit4SpringContextTests 类 【需要在pom.xml中加入 spring-test 的依赖, 以及 testng 或 junit】