前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >​将Bean交给Spring容器管理有几种方式?

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

作者头像
程序猿川子
发布2022-12-08 17:40:56
4180
发布2022-12-08 17:40:56
举报

Spring核心

Spring核心是 IOC 和 AOP 。

所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。

至于更详细的说明,或者去深入理解Spring这两大核心,不是此篇文章的目的,暂不细说了。

我们在Spring项目中,我们需要将Bean交给Spring容器,也就是IOC管理,这样你才可以使用注解来进行依赖注入。

包扫描+组件注解

针对类是我们自己编写的情况

这种方式是我们日常开发中最常用到的spring将扫描路径下带有@Component、@Controller、@Service、@Repository注解的类添加到spring IOC容器中。

如果你使用过MybatisPlus,那这个就和他的包扫描注入一样。

​编辑

那我们这个ComponentScan注解,又有三个配置。

配置项一

basePackages用于定义扫描的包的路径。

@ComponentScan(basePackages = "com.timemail.bootmp")

复制代码

比如这样,就是扫描com.timemail.bootmp整个包下的,带有以上指定注解的类,并放入IOC。

我在别的文章上找了一个完整的示例:

@Component

public class Person {

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return "Person{" +

"name='" + name + ''' +

'}';

}

}

@ComponentScan(basePackages = "com.springboot.initbean.*")

public class Demo1 {

public static void main(String[] args) {

AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(Demo1.class);

Person bean = applicationContext.getBean(Person.class);

System.out.println(bean);

}

}

复制代码

//结果

Person{name='null'}

复制代码

这就说明上面代码的Person类已经被IOC容器所管理了。

配置项二

includeFilters包含规则

Filter注解 用 FilterType.CUSTOM 可以自定义扫描规则 需要实现TypeFilter接口实现match方法 其中参数 MetadataReader 当前类的信息(注解,类路径,类原信息…) MetadataReaderFactory MetadataReader的工厂类。

配置项三

excludeFilters移除规则

同包含规则。

这后两个配置项我没怎么用过,也不太熟悉,所以详细使用请自行查阅相关资料。

@Configuration + @Bean

@Configuration + @Bean也是我们常用的一种放入容器的方式。

@Configuration用于声明配置类

@Bean用于声明一个Bean

@Configuration

public class Demo {

@Bean

public Person person() {

Person person = new Person();

person.setAge(10);

return person;

}

}

复制代码

​编辑

就像这样。

那我们指知道,在SSM里面,通常我们会在xml里面去配置bean。

@Configuration

public class ConfigBean {

}

复制代码

那我们这个@Configuration注解,就相当于一个Bean的xml配置。

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">

</beans>

复制代码

Bean注解中的属性

我们@Bean注解还有许多属性可以配置。

我们可以查看其源码:

@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) //@1

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface Bean {

@AliasFor("name")

String[] value() default {};

@AliasFor("value")

String[] name() default {};

@Deprecated

Autowire autowire() default Autowire.NO;

boolean autowireCandidate() default true;

String initMethod() default "";

String destroyMethod() default AbstractBeanDefinition.INFER_METHOD;

}

复制代码

value和name是一样的,设置的时候,这2个参数只能选一个,原因是@AliasFor导致的

value:字符串数组,第一个值作为bean的名称,其他值作为bean的别名

autowire:这个参数上面标注了@Deprecated,表示已经过期了,不建议使用了

autowireCandidate:是否作为其他对象注入时候的候选bean。

initMethod:bean初始化的方法,这个和生命周期有关,以后详解

destroyMethod:bean销毁的方法,也是和生命周期相关的,以后详解

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档