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;
}
}
其他类见上节 点击打开链接