1. 程式人生 > >spring實戰-JavaConfig裝配bean

spring實戰-JavaConfig裝配bean

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;
	}
}

其他類見上節點選開啟連結