Spring学习(七):通过Java代码装配bean
2017-09-27 20:46
337 查看
1. 引言
尽管在很多场景下通过组件扫描和自动装配实现Spring的自动化配置是更为 推荐的方式,但有时候自动化配置的方案行不通,因此需要明确配置 Spring。比如说,你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component和@Autowired注解的,因此 就不能使用自动化装配的方案了。在这种情况下,你必须要采用显式装配的方式。在进行显式配置的时候,有两种可选方案:Java和XML。在这节中,我们将会学习如何使用Java配置, 接下来的一节中将会继续学习Spring的XML配置。
JavaConfig与其他的Java代码又有所区别,在概念上,它与应用程序 中的业务逻辑和领域代码是不同的。尽管它与其他的组件一样都使用相同的 语言进行表述,但JavaConfig是配置代码。这意味着它不应该包含任何业务 逻辑,JavaConfig也不应该侵入到业务逻辑代码之中。尽管不是必须的,但 通常会将JavaConfig放到单独的包中,使它与其他的应用程序逻辑分离开 来,这样对于它的意图就不会产生困惑了。
2. 案例讲解
2.1 CD接口
package blog.p2; public interface CD { void play(); }
2.2 JayCD实现CD接口
package blog.p2; import org.springframework.stereotype.Component; public class JayCD implements CD { private String title = "稻香"; private String artist = "Jay"; public void play() { System.out.println("palying " + title + " by " + artist); } }
2.3 CDPlayer
package blog.p2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; public class CDPlayer { private CD cd; public CDPlayer() { } public CDPlayer(CD cd) { this.cd = cd; } public void play(){ cd.play(); } public void setCd(CD cd) { this.cd = cd; } }
2.4 配置类
package blog.p2; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class Config { @Bean public CD jayCd(){ return new JayCD(); } @Bean public CDPlayer cdPlayer(){ return new CDPlayer(jayCd()); } }
上面代码中,@Bean注解会告诉Spring这个方法将会返回一个对象,该对象要注册为Spring 应用上下文中的bean。方法体中包含了最终产生bean实例的逻辑。
默认情况下,bean的ID与带有@Bean注解的方法名是一样的。在本例中, bean的名字将会是jayCd。如果你想为其设置成一个不同的名字的 话,那么可以重命名该方法,也可以通过name属性指定一个不同的名字
那么如何实现注入呢?在这里并没有使用默认的构造器构建实例,而是调用了需要传入CD对象的构造器来创建CDPlayer实例。看起来,CD是通过调用jayCd()得到的,但情况并非完全如此。因为sgtPeppers()方法上添加了@Bean注解,Spring将会拦截所有对它的调用,并确保直接返回该方法所创建的bean,而不是每次都对其进行实际的调用。如果多个方法调用jayCd()方法,得到的将是同一个实例。
当然,也可以不用构造器注入的方式,而使用方法注入:
@Bean public CDPlayer cdPlayer2(){ CDPlayer cdPlayer = new CDPlayer(); cdPlayer.setCd(jayCd()); return cdPlayer; }
2.5 测试类
package blog.p2; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = Config.class) public class App { @Autowired CDPlayer cdPlayer; @Test public void test(){ cdPlayer.play(); } }
最后输出:
palying 稻香 by Jay
至此,我们通过java配置Spring的案例就完成了。
相关文章推荐
- Spring基础_通过java代码装配bean<二>
- 通过Java代码装配bean
- Spring学习笔记(三) --- 装配Bean之通过Java代码装配Bean
- Spring 如何通过 Java 代码装配 bean?
- 【Spring in action】自动化装配Bean、通过Java代码及xml装配Bean
- Spring 之通过 Java 代码装配 bean
- Spring 通过Java代码装配bean
- 装配Bean——通过java代码装配bean
- 七、通过Java代码装配bean
- Spring实战——通过Java代码装配bean
- 通过java代码装配Bean
- 通过Java代码装配bean【Spring 入门】
- java代码装配bean
- Spring装配bean的三种方法:自动化装配,java代码装配,XML装配及它们的混合使用
- Spring IOC之通过JAVA代码配置Bean
- Spring装配Bean之Java代码装配bean
- Spring基础篇——通过Java注解和XML配置装配bean
- 通过java代码获取spring Context 下的bean
- Spring基础篇——通过Java注解和XML配置装配bean
- spring笔记:第二章(通过javaconfig类装配bean)