Spring3.0中Bean注入其他Bean的方法

    科技2025-10-14  2

    Spring3.0中Bean注入其他Bean的方法

    1.使用方法参数形式进行注入

    就是将想要注入的Bean当成参数注入到另一个Bean中

    1.容器中只存在一个要注入类型的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()); } }

    显示结果:

    2.容器中存在两个及以上要注入类型的Bean

    首先Spring容器会先根据类型进行匹配,如果存在多个,则进行名称的匹配 @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; } }

    显示结果:

    在Bean上进行声明 @Primary表示类型冲突时使用该Bean @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; } }

    显示结果:

    2.使用方法进行注入

    因为想要注入的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

    Processed: 0.009, SQL: 8