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

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

Spring核心
Spring核心是 IOC 和 AOP 。

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

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

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

包扫描+组件注解
针对类是我们自己编写的情况

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

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

​编辑

那我们这个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;
}

}
复制代码

​编辑

000.png

就像这样。

那我们指知道,在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">



复制代码

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销毁的方法,也是和生命周期相关的,以后详解

相关文章
|
6月前
|
XML Java 测试技术
《深入理解Spring》:IoC容器核心原理与实战
Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
|
6月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
669 2
|
11月前
|
XML Java 数据格式
Spring IoC容器的设计与实现
Spring 是一个功能强大且模块化的 Java 开发框架,其核心架构围绕 IoC 容器、AOP、数据访问与集成、Web 层支持等展开。其中,`BeanFactory` 和 `ApplicationContext` 是 Spring 容器的核心组件,分别定位为基础容器和高级容器,前者提供轻量级的 Bean 管理,后者扩展了事件发布、国际化等功能。
287 18
|
XML Java 数据格式
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
京东一面:spring ioc容器本质是什么? ioc容器启动的步骤有哪些?
|
XML Java 数据格式
Spring容器的本质
本文主要讨论Spring容器最核心的机制,用最少的代码讲清楚Spring容器的本质。
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
490 6
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
381 1
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
XML Java 开发者
经典面试---spring IOC容器的核心实现原理
作为一名拥有十年研发经验的工程师,对Spring框架尤其是其IOC(Inversion of Control,控制反转)容器的核心实现原理有着深入的理解。
948 3
|
前端开发 Java Docker
使用Docker容器化部署Spring Boot应用程序
使用Docker容器化部署Spring Boot应用程序

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多