spring實戰-JavaConfig裝配bean
阿新 • • 發佈:2019-01-07
Spring還提供了基於Java配置(JavaConfig)來裝配bean,在程式設計時推薦使用型別安全,且比XML更加強大的JavaConfig。
TestMain4
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes=JavaConfig.class) public class TestMain { @Autowired private Config config; @Autowired private OuterConnection outerConnection; @Autowired private Service service; @Test public void test(){ System.out.println(config.getTimeOut()); System.out.println(outerConnection.getProxyInfo().getIp()); System.out.println(service.getConnection().getProxyInfo().getIp()); } }
JavaConfig
package com.halfworlders.web; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import com.halfworlders.outer.OuterConnection; import com.halfworlders.outer.OuterProxyInfo; /** * 1,@ComponentScan 等價於<context:component-scan> * 2,@ComponentScan不帶引數時, 表示掃描該JavaConfig檔案所在包以及子包內的所有帶註解的Bean * 3,系統開發時通常將JavaConfig集中放在一個包內,以方便管理,此時可以通過basePackages引數設定要掃描的包及其子包 * 4,還可以通過basePackageClasses引數設定類名,表示要掃描該類所在的包以及子包 * 以上只適合掃描自定義的帶註解Bean,如果希望把非本專案內的,通過jar包引入的類注入sping中,而引入的類又沒有spring註解怎麼辦? * 5,可以通過@Bean註解 */ @Configuration @ComponentScan(basePackages = { "com.halfworlders.web", "com.halfworlders.dao" }, basePackageClasses = {Service.class }) public class JavaConfig { /* * 通過@Bean註解將ProxyInfo注入到spring中,預設是單例模式,並且bean的id就是方法名 */ @Bean public OuterProxyInfo outerProxy() { return new OuterProxyInfo(); } /* * 可以在注入方法中執行任何Java的程式,包括構造注入,屬性注入等 通過方法引數自動早spring中搜索符合注入的bean */ @Bean public OuterConnection ourteConnection(OuterProxyInfo proxyInfo) { OuterConnection connection = new OuterConnection(); connection.setProxyInfo(proxyInfo); return connection; } }
OuterProxyInfo
package com.halfworlders.outer; public class OuterProxyInfo { private String ip = "127.0.0.1"; private int port; public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } }
OuterConnection
package com.halfworlders.outer;
public class OuterConnection {
private OuterProxyInfo proxyInfo;
public OuterConnection(){
}
public OuterConnection(OuterProxyInfo proxy){
this.proxyInfo = proxy;
}
public OuterProxyInfo getProxyInfo() {
return proxyInfo;
}
public void setProxyInfo(OuterProxyInfo proxyInfo) {
this.proxyInfo = proxyInfo;
}
}
其他類見上節點選開啟連結