当前位置: 首页 > 后端技术 > Node.js

将Bean交给Spring容器管理有几种方式?

时间:2023-04-03 20:40:57 Node.js

Spring核心Spring核心就是IOC和AOP。所谓IoC,对于spring框架来说,就是spring负责控制对象的生命周期和对象之间的关系。至于更详细的描述,或者深入理解Spring的两大核心,不是本文的目的,暂且不赘述。在我们的Spring项目中,需要把Bean交给Spring容器,也就是IOC管理,这样就可以使用注解进行依赖注入了。包扫描+组件注解是自己给类写的。这种方式是我们日常开发中最常用的。Spring在容器中的springIOC的扫描路径下添加@Component、@Controller、@Service、@Repository注解的类。如果你用过MybatisPlus,那么这个和他的包扫描注入是一样的。编辑那么我们的ComponentScan注解有三种配置。配置项basePackages用于定义扫描包的路径。@ComponentScan(basePackages="com.timemail.bootmp")复制代码例如,它扫描整个com.timemail.bootmp包下的类,将上面指定的注解放入IOC中。我在另一篇文章中找到了一个完整的例子:@ComponentpublicclassPerson{privateStringname;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}@OverridepublicStringtoString(){返回"Person{"+"name='"+name+'''+'}';}}@ComponentScan(basePackages="com.springboot.initbean.*")publicclassDemo1{publicstaticvoidmain(String[]args){AnnotationConfigApplicationContextapplicationContext=newAnnotationConfigApplicationContext(Demo1.class);Personbean=applicationContext.getBean(Person.class);System.out.println(bean);}}复制代码//resultPerson{name='null'}复制代码这意味着上面代码中的Person类已经被IOC容器管理了。配置项2includeFilters包含规则Filter注解。使用FilterType.CUSTOM自定义扫描规则。您需要实现TypeFilter接口来实现match方法。参数为MetadataReader当前类的信息(注解、类路径、类原始信息...)MetadataReaderFactoryMetadataReader的工厂类。配置项三excludeFilters去除规则同包含规则。后两个配置项我用的不多,不是很熟悉,详细使用请参考相关资料。@Configuration+@Bean@Configuration+@Bean也是我们常见的放入容器的方式。@Configuration用于声明一个配置类@Bean用于声明一个Bean@ConfigurationpublicclassDemo{@BeanpublicPersonperson(){Personperson=newPerson();person.setAge(10);returnperson;}}像这样复制代码编辑。那么我们知道,在SSM中,我们一般都是在xml中配置bean。@ConfigurationpublicclassConfigBean{}复制代码那么我们的@Configuration注解就相当于一个Bean的xml配置。复制代码中的属性Bean注解我们的@Bean注解有很多属性可以配置。我们可以查看其源码:@Target({ElementType.METHOD,ElementType.ANNOTATION_TYPE})//@1@Retention(RetentionPolicy.RUNTIME)@Documentedpublic@interfaceBean{@AliasFor("name")String[]value()default{};@AliasFor("value")String[]name()default{};@DeprecatedAutowireautowire()defaultAutowire.NO;booleanautowireCandidate()defaulttrue;StringinitMethod()default"";StringdestroyMethod()defaultAbstractBeanDefinition.INFER_METHOD;}复制代码value和name是一样的,设置的时候这两个参数只能选一个,原因是@AliasFor:stringarray导致的value,第一个value为bean的名字,其他值作为bean的别名autowire:@Deprecated在这个参数上标注,表示已经过期,不建议使用autowireCandidate:注入时是否为候选bean其他对象。initMethod:bean初始化的方法,跟生命周期有关,后面会详细解释destroyMethod:bean销毁的方法,也跟生命周期有关,后面会详细解释