zl程序教程

您现在的位置是:首页 >  后端

当前栏目

spring的注解@Component、@Bean,@Autowire一遍搞定

Spring 注解 搞定 bean Component 一遍
2023-09-27 14:22:12 时间

一 spring注解的作用

1.1 作用

1.@Component: 注解表明一个类会作为组件类,并告知Spring要为这个类创建bean,使用          @Component注解在一个类上,表示将此类标记为Spring容器中的一个Bean。(相当于创建对象

2.@Bean是将组件注册到Bean,让IOC容器知道这个组件存在。(相当于创建对象) 

3.@Autowire:是组件和组件相互调用的时候,自动从ioc中取出来需要用的组件。(调用对象

比如Service,Controller,Dao的关系,这三个组件都分别加上了注册的注解:@Service,@Controller,@Component,ioc中已经有了注册信息,但是Service要用到Dao操作数据,所以在Service中的Dao头上就要用@Autowired来给Dao自动赋值,来供Service用,同理,Controller中也要用到Service,那么就要在Service上边加上@Autowired 

1.声明定义:TokenSotre对象

 2.调用使用

1.2 @Component与@Bean的区别

@Component(@Controller、@Service、@Repository)通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中。

而@Bean注解通常是我们在标有该注解的方法中定义产生这个bean的逻辑。

@Component 作用于类,@Bean作用于方法。

相同点:两者的目的是一样的,都是注册bean到Spring容器中。

不同点:@Component和@Bean都是用来注册Bean并装配到Spring容器中,但是Bean比Component的自定义性更强。可以实现一些Component实现不了的自定义加载类。

1.3 @Bean的使用

  • @Bean 注解作用在方法上
  • @Bean 指示一个方法返回一个 Spring 容器管理的 Bean
  • @Bean 方法名与返回类名一致,首字母小写
  • @Bean 一般和 @Component 或者 @Configuration 一起使用
  • @Bean 注解默认作用域为单例 singleton 作用域,可通过 @Scope(“prototype”) 设置为原型作用域

(1)默认情况下 Bean 名称就是方法名,比如下面 Bean 名称便是 myBean:

 @Component
public   Class  ParamConfig{
 
 @Bean
public MyBean myBean() {    
   return new MyBean();
   }
}

(2)@Bean 注解支持设置别名。比如下面除了主名称 myBean 外,还有个别名 myBean1(两个都可以使用)

 @Component
public   Class  ParamConfig{
@Bean("myBean1")
public MyBean myBean() {
    return new MyBean();
 }
}

二 spring的@Bean和@Component

2.1 描述

Spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean。

完成这两个动作有三种方式,一种是使用自动配置的方式、一种是使用JavaConfig的方式,一种就是使用XML配置的方式。

2.2 使用自动配置模式

@Component
public class Student {

    private String name = "lkm";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

2.3 使用java的config模式@Bean

@Bean 需要在配置类中使用,即类上需要加上@Configuration注解

@Configuration
public class WebSocketConfig {
    @Bean
    public Student student(){
        return new Student();
    }

}

2.4 调用

两者都可以通过@Autowired装配

@Autowired
Student student;

2.5 有@Compent为何还需要@Bean呢?

如果你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component注解的,因此就不能使用自动化装配的方案了,但是我们可以使用@Bean,当然也可以使用XML配置。

三 @bean与@Component

3.1 结构

 3.2 @Bean的使用:new一个普通类

1.B类:作为一个普通类,不引用其他类

2.C类:进行@bean的调用

 3.调用:

  3.3 @Bean的使用:在new的类中含有通过@Autowire引用其他类

1.A类

 2.B类

b类中通过@Autowired引用其他类

 3.c类

 4.调用

报错:空指针

 总结:有3.2 和3.3 这两个例子得出,通过@Bean方法new出的类中不能含有@Autowire再引用其他类。只能new一个普通的类,才能使用。

  3.4 改为@Autowire调用

1.A

 2.B 类

 3. c类:通过@Autowired引用B类,B类通过@Autowired引用了A类,需要通过在c类中也通过@Autowire引用B类

4.调用