閱讀122 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Spring三種bean裝配方案

首先來個簡單且古老的Java類吧

public class SpringBean {
    public void say(){
        System.out.println("這是一個SpringBean");
    }
}

1、當然了,第一種必須是我們最智能話的裝配方案,自動裝配了。

在自動裝配的時候,需要保證對**類**進行注解操作。
@Component//一種通用的組件描述
@Controller//通常用於web中的控製器組件上
@Service//通常用於service服務組件上
@Repository//通常用於數據訪問及操作組件

@Component//一種通用的組件描述
//@Controller//通常用於web中的控製器組件上
//@Service//通常用於service服務組件上
//@Repository//通常用於數據訪問及操作組件
//一次隻能使用一個喲,千萬不要像我這樣進行注解,為了減少代碼量我才把他們放在了一起。
public class SpringBean {
    public void say(){
        System.out.println("這是一個SpringBean");
    }
}

自動裝配方案中如何在注解沒有明確指定名稱的話,則默認bean的ID為類名且首字母自動變成小寫字母,如果指定了名稱的話則以指定的名稱作為bean的ID。

@Component("component")//一種通用的組件描述
//@Controller("controller")//通常用於web中的控製器組件上
//@Service("service")//通常用於service服務組件上
//@Repository("repository")//通常用於數據訪問及操作組件
public class SpringBean {
    public void say(){
        System.out.println("這是一個SpringBean");
    }
}

1.1 XML文件配置自動裝配方案
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="https://www.springframework.org/schema/context"
       xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
  <!--啟用自動掃描功能,掃描“cn.sharek.test”包下所有帶注解的POJO(Plain Old Java Object,簡單且古老的Java對象)-->
    <context:component-scan base-package="cn.sharek.test"/>
</beans>
1.2 JavaConfig配置自動裝配方案
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration//表明該類是Spring的配置類
@ComponentScan("cn.sharek.test")//啟用自動掃描功能,掃描“cn.sharek.test”包下所有帶注解的POJO(Plain Old Java Object,簡單且古老的Java對象
public class SpringRootConfig {
}

沒有看錯,通過Java代碼實現Spring的配置工作就是這麼簡單,但它並不是萬能的,直到現在依然有部分的配置(Spring Web FLow....)無法通過Java代碼實現,必須借助於XML文件。不要著急,文章結尾會介紹一種混合配置,XML中導入Java代碼的配置,Java代碼中導入XML的配置都是可以的。

2、通過XML文件,手動編輯bean

接下來的是通過XML手動編輯bean,當然了,繼續使用前麵那個用來被我們蹂躪的POJO。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--id指定bean的名稱,class指定是那個類-->
    <bean  />
</beans>

現在:這個bean已經可以使用了。

如果這個bean沒有屬性需要設置或者注入,且沒有唯一的帶有參數的構造方法的話那麼這麼做是正確的。當有唯一的帶參構造方法,且沒有實現無參構造方法的那麼這麼做絕對是一個錯誤的選擇,這時候你需要為構造參數設置屬性值或者注入屬性值。
看一看上麵所描述的情況該如何去做:

public class SpringBean {
    public SpringBean(String str) {
        System.out.println("你設置了str!!!它的值是:"+str);
    }

    public void say(){
        System.out.println("這是一個SpringBean");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean  >
        <constructor-arg value="一隻二哈"/>
    </bean>
</beans>

當然了,我們在這裏不考慮那些多參數的情況,因為我們在這是在將bean的裝配方案,以後會將多參數的情況該如何去做的,不要著急。

3、通過JavaConfig類,手動編輯bean

我比較喜歡這種,通過**類**來管理類。

@Configuration//表明該類是Spring的配置類
public class SpringRootConfig {
    @Bean//很簡單
    public SpringBean springBean(){
        return new SpringBean();
    }
}

方法名就是bean的ID,該變方法名稱就可改變bean的ID。當然了也可已通過注解的name屬性來指定

@Configuration//表明該類是Spring的配置類
public class SpringRootConfig {
    @Bean(name="happy")//很簡單
    public SpringBean springBean(){
        return new SpringBean();
    }
}

到此就該結束了。

No,No,No

還有一件有趣的事情

當然是混合配置了

在JavaConfig類中混入JavaConfig類

@Configuration//表明該類是Spring的配置類
@Import(ServiceConfig.class)//導入一個配置類
//@Import({ServiceConfig.class,ControllerConfig.class})//導入多個配置類
//@Import隻能出現一次喲
public class SpringRootConfig {
}

在JavaConfig類中混入JavaConfig類及XMl文件

當然了隻混入XML文件也是可行的,這沒有錯。

@Configuration//表明該類是Spring的配置類
@Import(ServiceConfig.class)//導入一個配置類
@ImportResource("classpath:application.xml")//導入一個XML配置文件
public class SpringRootConfig {
}

在XML文件中混入XMl文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
    <import resource="service.xml"/>
    <import resource="controller.xml"/>
</beans>

在XML文件中JavaConfig

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--導入ServiceConfig-->
    <bean />
    <!--導入ControllerConfig-->
    <bean />
</beans>

混合配置似乎看起來很好用,能夠將一個文件按照功能,或者業務進行拆分。但需要注意的是,千萬千萬不能出現重複ID的bean。不然,Spring會不清楚你在使用哪一個bean。

最後更新:2017-10-07 15:02:58

  上一篇:go  新浪微博關鍵詞結果爬取 實現過程 記錄
  下一篇:go  免費數據恢複軟件哪個好用排行榜