Spring 之通过 Java 代码装配 bean
【关于IoC的几点认识】
1、面向接口编程 --> 每层只向上层提供接口
2、inversion of control (IoC) -->参考百度百科
3、DI是IoC的一种实现方式
【通过Java代码装配 bean】
由于自动化装配有一些无法避免的缺陷(例如无法装配第三方库中的组件
所以不得不采用显示装配的方式,按照书上的说法,显示装配有两种可选方案:Java和XML,
JavaConfig是更好的选择(更加强大、安全),XML属于历史遗留问题。

1、用 配置 代替 扫描。
package soundsystem; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; @Configuration
public class CDPlayerConfig {
@Bean
public CompactDisc sgtPeppers() {
return new SgtPeppers();
// 返回一个对象,该对象将注册为Spring应用上下文中的bean,bean的ID默认与方法名相同
// 默认情况下该bean为单例
} @Bean
public CompactDisc randomBeatlesCD() {
// 可以各种 if else ,尽情发挥Java的所有功能,
// 只要最终返回一个 CompactDisc实例既可
// 带有 @Bean 注解的方法可以采用任何必要的Java功能来产生 bean实例
return new SgtPeppers();
}
}
Java 显式创建 bean 的两个注解是类级别的 @Configuration 注解和方法级别的 @bean 注解,最后需要把这个配置类导入到根配置文件中。
2、最简单的注入(装配)方式。——直接在JavaConfig中装配
package soundsystem; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration; @Configuration
public class CDPlayerConfig {
@Bean
public CompactDisc randomBeatlesCD() {
// 可以各种 if else ,尽情发挥Java的所有功能,
// 只要最终返回一个 CompactDisc实例既可
// 带有 @Bean 注解的方法可以采用任何必要的Java功能来产生 bean实例
return new SgtPeppers();
} @Bean
public CDPlayer cdPlayer() {
return new CDPlayer(randomBeatlesCD());
}
}
3、无法解决歧义的注入(装配)方式。—— @ Autowired (不算用Java代码装配 bean,只是用Java代码配置 bean!)
如果配置形如 1 ,将由于歧义无法完成装配。
package soundsystem; import static org.junit.Assert.*; import org.junit.Rule;
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 = CDPlayerConfig.class)
public class CDPlayerTest { @Autowired
private CompactDisc cd; @Autowired
private CDPlayer cdPlayer; @Test
public void cdAndCdPlayerShouldNotBeNull() {
assertNotNull(cd);
assertNotNull(cdPlayer);
}
}
4、正确的注入姿势。
暂略
Spring 之通过 Java 代码装配 bean的更多相关文章
- Spring实战——通过Java代码装配bean
		
上篇说的是无需半行xml配置完成bean的自动化注入.这篇仍然不要任何xml配置,通过Java代码也能达到同样的效果. 这么说,是要把上篇的料拿出来再煮一遍? 当然不是,上篇我们几乎都在用注解的方式如 ...
 - Spring装配之——JAVA代码装配Bean
		
首先创建几个普通的JAVA对象,用于测试JAVA代码装配bean的功能. package soundsystemJava; //作为接口 定义了CD播放器对一盘CD所能进行的操作 public int ...
 - 第2章—装配Bean—通过java代码装配bean
		
通过java代码装配bean  在进行显式装配的时候,有两种选型方案:java和XML配置,这里先介绍java的配置方式. 2.3.1创建配置类 先复习下上一章的配置内容: @Configurati ...
 - Spring学习系列(三) 通过Java代码装配Bean
		
上面梳理了通过注解来隐式的完成了组件的扫描和自动装配,下面来学习下如何通过显式的配置的装配bean 二.通过Java类装配bean 在前面定义了HelloWorldConfig类,并使用@Compon ...
 - 通过Java代码装配Bean
		
上面梳理了通过注解来隐式的完成了组件的扫描和自动装配,下面来学习下如何通过显式的配置的装配bean 二.通过Java类装配bean 在前面定义了HelloWorldConfig类,并使用@Compon ...
 - Spring Boot 使用Java代码创建Bean并注册到Spring中
		
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/catoop/article/details/50558333 声明同一个类下的多个实例: packa ...
 - Spring Boot 使用Java代码创建Bean并注冊到Spring中
		
从 Spring3.0 開始,添加了一种新的途经来配置Bean Definition,这就是通过 Java Code 配置 Bean Definition. 与Xml和Annotation两种配置方式 ...
 - (41)Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】
		
已经好久没有讲一些基础的知识了,这一小节来点简单的,这也是为下节的在Spring Boot中使用多数据源做准备. 从Spring 3.0开始,增加了一种新的途径来配置Bean Definition,这 ...
 - Spring装配Bean之Java代码装配bean
		
尽管通过组件扫描和自动装配实现Spring的自动化配置很方便也推荐,但是有时候自动配置的方式实现不了,就需要明确显示的配置Spring.比如说,想要将第三方库中的组件装配到自己的应用中,这样的情况下, ...
 
随机推荐
- mysql_real_connect 端口号说明
			
mysql_real_connect语法: C++ Code 12345678 MYSQL * mysql_real_connect(MYSQL * mysql, ...
 - poj 1185(状压dp)
			
题目链接:http://poj.org/problem?id=1185 思路:状态压缩经典题目,dp[i][j][k]表示第i行状态为j,(i-1)行状态为k时最多可以放置的士兵个数,于是我们可以得到 ...
 - Android 实现个性的ViewPager切换动画  实战PageTransformer(兼容Android3.0下面)
			
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40411921.本文出自:[张鸿洋的博客] 1.概述 之前写过一篇博文:Andro ...
 - uWSGI配置(转 )
			
原文地址:http://www.cnblogs.com/zhouej/archive/2012/03/25/2379646.html 下面的内容包含了大部分uWSGI的配置选项,这些配置选项的列举没有 ...
 - Java面试题全集(上)(中)(下) (转)+自己总结
			
Java面试题 自己总总结 https://www.cnblogs.com/songanwei/p/9366427.html Java面试题全集(上) https://blog.csdn.net/ja ...
 - IOS学习笔记28—SQLite3第三方库之FMDB
			
本文转载至 http://blog.csdn.net/happyrabbit456/article/details/11609451 SQLite是一种小型的轻量级的关系型数据库,在移动设备上使用是非 ...
 - win7下安装memcached
			
memcached server端服务在win7下的安装.启动图解 1.首先下载解压memcached-1.2.6-win32-bin.zip到某一盘下,如下图 2.通过管理员方式运行cmd.exe. ...
 - CKEDITOR 4.6.X 版本  插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
			
项目开发过程中,发现CKEDITOR 插件的弹出框 内 如果跟据项目需要写表格(table tr td),表格的边框等属性会被 CKEDITOR的清除或覆盖,导致表格很难看. 问题关键: 插件弹出框d ...
 - Openstack深入了解虚拟机
			
续Openstack虚拟机创建流程 在控制节点也安装一个计算服务也变成一个计算节点 yum -y install openstack-nova-compute 启动并且设置开机启动 systemctl ...
 - delphi xe -芒果数据库(FDConnection,DataSource,FDMongoQuery,FDMongoDataSet)连接,查询(展示数据),这里有mongodb为例子
			
一.连接 1.FDConnection:创建一个临时连接定义 资料:http://www.cnblogs.com/zhenfei/p/4105515.html 连接芒果数据库:选则Mongo(芒果), ...