---
title: Springboot Bean 小记
date: 2018-10-25 10:01:17
tags: [Spring Boot,Bean]
categories: [Java,Spring]
---
### Spring boot 中创建bean的方式

- @Component Spring中最广的注解
```java
@Compent
public class DemoBean(){

}
```

- @Bean 一般使用在动态代理的配置类中 @Configuration
```java
Configuration
public class DemoConfig(){
    
    private DemoClass demoClass;

    @Bean
    public DemoClass demoClass(){
        return demoClass;
    }
}
```

顺便说下两个注解的区别
> 在Component中(@Component标注的类，包括@Service,@Repository, @Controller)使用@Bean注解和在@Configuration中使用是不同的。在@Component类中使用方法或字段时不会使用CGLIB增强(及不使用代理类：调用任何方法，使用任何变量，拿到的是原始对象)。而在@Configuration类中使用方法或字段时则使用CGLIB创造协作对象（及使用代理：拿到的是代理对象）;当调用@Bean注解的方法时它不是普通的Java语义，而是从容器中拿到由Spring生命周期管理、被Spring代理甚至依赖于其他Bean的对象引用。在@Component中调用@Bean注解的方法和字段则是普通的Java语义，不经过CGLIB处理

简单来说就是 @Configuration 里面多处理了一层，动态增强了，例如同一个bean 就不会被重复生成，而 @Component 就会

### 统一封装springboot dubbo 的调用 封装到一个类中
```java
@Configuration
public class DubboApiBean {

    @Reference(version = "1.0")
    private IPersonnelApi personnelApi;

    @Reference(version = "1.0")
    private IPrivilegeApi privilegeApi;

    @Reference(version = "1.0")
    private IMisApi misApi;

    @Bean
    public IPersonnelApi personnelApi() {
        return personnelApi;
    }

    @Bean
    public IPrivilegeApi privilegeApi() {
        return privilegeApi;
    }

    @Bean
    public IMisApi misApi(){
        return misApi;
    }
}
```
在调用时直接使用@Resource 或@Autowired 