Bean 和 static的区别

@Bean 和 Static

Static 没有办法控制在多个并发请求的时候,只生成一个实例。有多少个请求就会生成多少个 实例,那么此时如果用 @Bean的方式来注解,就会启用SpringBoot中的单例模式,从始至终都只有一个实例

静态方法我们都知道,那么@Bean的方式怎么使用呢?

@Configuration
@Slf4j
public class CephConfiguration {

    @Value("#{'${ceph.hosts}'.split(',')}")
    private List hosts;

    @Value("${ceph.accessKey}")
    private String accessKey;

    @Value("${ceph.secretKey}")
    private String secretKey;

    /**
     * 连接ceph
     */
    @Bean
    public AmazonS3 cephClient() {
        AmazonS3 amazonS3  = null;
        AWSCredentialsProvider credentialsProvider = new AWSCredentialsProvider() {
            @Override
            public AWSCredentials getCredentials() {
                return new BasicAWSCredentials(accessKey, secretKey);
            }

            @Override
            public void refresh() {
            }
        };
        ClientConfiguration clientConfiguration = new ClientConfiguration();
        clientConfiguration.setProtocol(Protocol.HTTP);
        AwsClientBuilder.EndpointConfiguration endpointConfiguration = new AwsClientBuilder.EndpointConfiguration(hosts.get(0), null);
        amazonS3 = AmazonS3ClientBuilder.standard().withCredentials(credentialsProvider)
                .withEndpointConfiguration(endpointConfiguration)
                .withClientConfiguration(clientConfiguration).build();
        log.info("========================================================成功连接进入 ceph!========================================================");
        return amazonS3;
    }

}

然后引入的时候直接

//注意这里不需要引用configuration类,而是引用这个bean
@Autowired
private AmazonS3 cephClient;

你可能感兴趣的:(私人干货,java)