1. 程式人生 > >Spring程式碼例項系列-05:通過註解@Configuration、@Bean和@Import定義bean

Spring程式碼例項系列-05:通過註解@Configuration、@Bean和@Import定義bean

Spring中有三種定義Bean的方式:
1. *.xml/<bean>/<import>
2. @Configuration/@Bean/@Import
3. @Component/@Controller/@Service/@Dao

之前的例項中,都是通過第一種方式進行的。本章節記錄@Configuration/@Bean/@Import的bean定義方式。

0.程式目錄

project
    \---src
        \---main
            \---java
                \---pers
                    \
---hanchao \---configurationbean \---App.java \---AnnotationConfig.java \---RedisConfig.java \---SolrConfig.java \---RedisUtils.java \
---SolrUtils.java

1.App.java

package pers.hanchao.configurationbean;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * <p>通過@Configuration註解配置檔案,通過@Bean註解bean,通過@Import註解多個配置檔案</p>
 * @author
hanchao 2018/1/7 19:12 **/
public class App { public static void main(String[] args) { /** * 以xml的形式: * ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); * * 以註解的形式(不需要配置檔案) * ApplicationContext context = new AnnotationConfigApplicationContext(AnnotationConfig.class); */ ApplicationContext context = new AnnotationConfigApplicationContext(AnnotationConfig.class); RedisUtils redisUtils = (RedisUtils) context.getBean("redisUtils"); System.out.println(redisUtils.getInstance()); SolrUtils solrUtils = (SolrUtils) context.getBean("solrUtils"); System.out.println(solrUtils.getInstance()); } }

2.AnnotationConfig.java

起到applicationContext.xml的作用。

package pers.hanchao.configurationbean;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/**
 * <p>通過@Configuration註解配置檔案,通過@Import註解多個配置檔案</p>
 * @author hanchao 2018/1/7 19:32
 **/
@Configuration
@Import({RedisConfig.class,SolrConfig.class})
public class AnnotationConfig {}

3.RedisConfig.java

起到applicationContext-redis.xml的作用。

package pers.hanchao.configurationbean;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * <p>通過@Configuration註解配置檔案,通過@Bean註解bean</p>
 * @author hanchao 2018/1/7 19:32
 **/
@Configuration
public class RedisConfig {
    @Bean("redisUtils")
    public RedisUtils redisInit(){
        //模擬讀取redis的配置檔案獲取配置
        RedisUtils redisUtils = new RedisUtils();
        redisUtils.setHost("222.222.222.222");
        redisUtils.setPort(6379);
        redisUtils.setCluster(false);
        redisUtils.setPassword("12345");
        return redisUtils;
    }
}

4.SolrConfig.java

起到applicationContext-solr.xml的作用。

package pers.hanchao.configurationbean;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * <p>通過@Configuration註解配置檔案,通過@Bean註解bean</p>
 * @author hanchao 2018/1/7 19:32
 **/
@Configuration
public class SolrConfig {

    @Bean("solrUtils")
    public SolrUtils solrInit(){
        //模擬讀取solr的配置檔案獲取配置
        SolrUtils solrUtils = new SolrUtils();
        solrUtils.setHost("130.10.10.10");
        solrUtils.setPort(8983);
        solrUtils.setCloud(true);
        return  solrUtils;
    }
}

5.RedisUtils.java

package pers.hanchao.configurationbean;

public class RedisUtils {
    private String host;
    private int port;
    private boolean isCluster;
    private String password;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public boolean isCluster() {
        return isCluster;
    }

    public void setCluster(boolean cluster) {
        isCluster = cluster;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getInstance(){
        return "RedisUtils[host:" + host
                + ",port:" + port
                + ",password:" + password
                + ",isCluster:" + isCluster + "]";
    }
}

6.SolrUtils.java

package pers.hanchao.configurationbean;

public class SolrUtils {
    private String host;
    private int port;
    private boolean isCloud;

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public boolean isCloud() {
        return isCloud;
    }

    public void setCloud(boolean cloud) {
        isCloud = cloud;
    }

    public String getInstance(){
        return "SolrUtils[host:" + host
                + ",port:" + port
                + ",isCloud:" + isCloud + "]";
    }
}

7.result

RedisUtils[host:222.222.222.222,port:6379,password:12345,isCluster:false]
SolrUtils[host:130.10.10.10,port:8983,isCloud:true]