通常我们使用JPA来操作mysql数据库时,会使用@Service来注解service类,这样我们就可以在使用@Controller注解的controller里使用@Autowired来调用service类下的方法

但是在一些情况下我们不需要在一个类上@Service之类的注解

而是使用@Configuration+@Bean把一个类注入到bean容器

配置类

@Configuration
public class BlockChainServiceConfig {

    @Bean
    BlockChainService blockChainService(){
        return new BlockChainService();
    }
}

service类上没有使用任何注解,但是在该service里使用了@Autowired,如果没有上述config类,@Autowired下的类为null,有了上述config类,就成功在bean容器中找到需要的类,

注意:bean容器里的bean都是唯一的,名称不能重复

public class BlockChainService {

    @Autowired
    private RedisService redisService;

    @Autowired
    private BlockchainConfig blockchainConfig;

    public BlockChainService() {
、   
    }

    public void init() {
        redisService.create("test2", "你好");
        this.difficuty = blockchainConfig.getDifficuty();
    }

}

当项目启动后可以使用

@Autowired
private BlockChainService blockChainService;

能够在bean容器里找到注入进去的blockChainService   bean,成功实现调用blockChainService下的方法

blockChainService.init();

注意:BlockChainService类不需要在使用@Service(或者@Component、@Controller、@Repository、@Configuration这些用来定义Bean的注解)注解,这样会重复向bean容器中注入blockChainService,而且在BlockChainService的构造方法里不能使用该类下使用 @Autowired注解的类。

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐