spring给容器中注入组件的几种方式
2019-03-26 15:54
288 查看
目录
[code]<!-- https://mvnrepository.com/artifact/org.springframework/spring-context --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.5.RELEASE</version> </dependency>
spring给容器中注入组件
1.包扫描+组件标注注解(@Controller/@Service/@Repository/@Component)适用于把自己写的类加入组件(默认ID类名首字母小写)
此种方式比较简单就不贴代码了
2.@Bean[导入的第三方包里面的组件] (注意一定要在这个配置类上加上@Configuration)
[code]// @Scope指定作用域 // prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。 // 每次获取的时候才会调用方法创建对象; // singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。 // 以后每次获取就是直接从容器(map.get())中拿, // request:同一次请求创建一个实例 // session:同一个session创建一个实例 @Scope("prototype") @Lazy //懒加载 spring 默认是容器启动的时候创建对象 加上这个注解之后 创建容器时不会创建对象 只有在用到这个对象的时候才会创建 @Bean //给容器中注册一个Bean;类型为返回值的类型,id默认是用方法名作为id 可以@Bean("xxxx")指定id public Test1 test1Bbaen(){ return new Test1(); }
3.@Import[快速给容器中导入一个组件]
[code]@Configuration @ComponentScan("com.tjx") @Import({Test1.class, Test1Mapper.class}) //默认已该类的全类名作为id public class MainConfig { //======================================== //1.如果你想自定义逻辑返回需要导入的组件.可以写一个类实现ImportSelector接口,或者ImportBeanDefinitionRegistrar接口;注意使用实现ImportSelector的方式必须在@Import导入这个类,不要使用@Component直接把这个类加到容器,这样不会有效果,只会导入ImportSelector实现类的本身, 如下 @Configuration @ComponentScan("com.tjx") @Import({Test1.class, Test1Mapper.class,MyImportSelector.class,MyImportBeanDefinitionRegistrar.class}) //默认已该类的全类名作为id public class MainConfig { ================================ public class MyImportSelector implements ImportSelector{ //AnnotationMetadata:当前标注@Import注解的类的所有注解信息 @Override public String[] selectImports(AnnotationMetadata annotationMetadata) { //返回要导入到容器中的组件全类名 return new String[]{"com.tjx.service.Test1Service","xxxxxxxxxx"}; } } =============================== public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar { /** * AnnotationMetadata:当前类的注解信息 * BeanDefinitionRegistry:BeanDefinition注册类; * 把所有需要添加到容器中的bean;调用 * BeanDefinitionRegistry.registerBeanDefinition手工注册进来 */ @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { boolean definition = registry.containsBeanDefinition("com.atguigu.bean.Red"); boolean definition2 = registry.containsBeanDefinition("com.atguigu.bean.Blue"); if(definition && definition2){ //指定Bean定义信息;(Bean的类型,Bean。。。) RootBeanDefinition beanDefinition = new RootBeanDefinition(RainBow.class); //注册一个Bean,指定bean名 registry.registerBeanDefinition("rainBow", beanDefinition); } } }
4.使用Spring提供的 FactoryBean(工厂Bean);
1)、默认获取到的是工厂bean调用getObject创建的对象
2)、要获取工厂Bean本身,我们需要给id前面加一个&
applicationContext.getBean("&colorFactoryBean");
[code]package com.atguigu.bean; import org.springframework.beans.factory.FactoryBean; //创建一个Spring定义的FactoryBean public class ColorFactoryBean implements FactoryBean<Color> { //返回一个Color对象,这个对象会添加到容器中 @Override public Color getObject() throws Exception { // TODO Auto-generated method stub System.out.println("ColorFactoryBean...getObject..."); return new Color(); } @Override public Class<?> getObjectType() { // TODO Auto-generated method stub return Color.class; } //是单例? //true:这个bean是单实例,在容器中保存一份 //false:多实例,每次获取都会创建一个新的bean; @Override public boolean isSingleton() { // TODO Auto-generated method stub return false; } }
[code] 在配置类中 @Bean public ColorFactoryBean colorFactoryBean(){ return new ColorFactoryBean(); }
相关文章推荐
- SpringIOC容器创建对象及依赖注入的几种方式
- 【Spring 系列 给IOC容器添加组件的几种方式总结】
- 【SSH快速进阶】——Spring IOC容器注入的几种方式
- Spring通过@Value注解注入属性的几种方式
- Spring通过@Value注解注入属性的几种方式
- Spring中属性注入的几种方式以及复杂属性的注入
- Spring基础入门三:基于@Component,@Service,@Controller,@Repositroy自动扫描方式把组件纳入Spring容器中管理...
- spring详解:spring IOC依赖注入的几种方式
- spring笔记--依赖注入之针对不同类型变量的几种注入方式
- Spring依赖注入的几种方式
- Spring Ioc-依赖注入的几种方式
- Spring通过@Value注解注入属性的几种方式
- spring IOC 依赖注入的几种方式
- Spring 创建 IOC 容器时加载配置文件的几种方式
- Spring中Ioc容器的注入方式
- Java类获取spring 容器的bean的几种方式
- Spring2.5教程:5、通过在classpath自动扫描方式把组件纳入spring容器中管理
- spring的注入bean的几种方式
- spring容器(注入的方式)
- Spring IOC 容器创建bean的几种方式(Xml配置的方式)