就是将想要注入的Bean当成参数注入到另一个Bean中
当spring容器中只有一个要注入类型的Bean时,Spring会自动将该Bean注入
jdbc-config.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
自己开发的Bean2,内部需要注入其他类
public class Bean2 {
private String string;
public String getString() {
return string;
}
public void setString(String string) {
this.string = string;
}
}
实际注入操作
@Configuration
@PropertySource("classpath:jdbc-config.properties")
public class ApplicationConf {
@Value("${jdbc.driverClassName}") String driver;
//获取配置文件中的值
@Bean
public String str1(){
return driver;
}
@Bean
public Bean2 bean2(String str1){
Bean2 bean2 = new Bean2();
bean2.setString(str1);
return bean2;
}
}
测试方法
public class Demo1 {
public static void main(String[] args) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConf.class);
Bean2 bean2 = context.getBean("bean2", Bean2.class);
System.out.println(bean2.getString());
}
}
@Configuration
@PropertySource("classpath:jdbc-config.properties")
public class ApplicationConf {
@Value("${jdbc.driverClassName}") String driver;
//获取配置文件中的值
@Bean
public String str1(){
return driver;
}
@Bean
public String str2(){
return "str2";
}
@Bean
public Bean2 bean2(String str2){
Bean2 bean2 = new Bean2();
bean2.setString(str2);
return bean2;
}
}
显示结果是:
2. 在注入前,方法参数进行人为指定@Qualifier(“str1”):
@Configuration
@PropertySource("classpath:jdbc-config.properties")
public class ApplicationConf {
@Value("${jdbc.driverClassName}") String driver;
//获取配置文件中的值
@Bean
public String str1(){
return driver;
}
@Bean
public String str2(){
return "str2";
}
@Bean
public Bean2 bean2(@Qualifier("str1") String str2){
Bean2 bean2 = new Bean2();
bean2.setString(str2);
return bean2;
}
}
@Configuration
@PropertySource("classpath:jdbc-config.properties")
public class ApplicationConf {
@Value("${jdbc.driverClassName}") String driver;
//获取配置文件中的值
@Bean
@Primary
public String str1(){
return driver;
}
@Bean
public String str2(){
return "str2";
}
@Bean
public Bean2 bean2( String str2){
Bean2 bean2 = new Bean2();
bean2.setString(str2);
return bean2;
}
}
因为想要注入的Bean一定是已经注入到Spring 容器中的,并且是通过类的方法进行注入的,所以当另一个Bean需要依赖该Bean时,可以直接调用对应的方法返回Bean进行set设置进行注入
@Configuration
@PropertySource("classpath:jdbc-config.properties")
public class ApplicationConf {
@Value("${jdbc.driverClassName}") String driver;
//获取配置文件中的值
@Bean
public String str1(){
return driver;
}
@Bean
public String str2(){
return "str2";
}
@Bean
public Bean2 bean2( ){
Bean2 bean2 = new Bean2();
bean2.setString(str2());
return bean2;
}
}
限制是:只能在当前配置类中使用,当跨类时不能使用
并且使用@Configuration注解,当前配置类会动态生成代理对象,当设置当前Bean为prototype时,依赖的Bean即使是返回return new Object() ,依赖Bean始终是同一个Object