Spring源码窥探之:FactoryBean
1. 定义Fish实体类
/**
* @author 70KG
* @Title: Fish
* @Description:
* @date 2018/7/22下午5:00
* @From www.nmyswls.com
*/
@Data
public class Fish { private String name; private int age; public Fish(){} public Fish(String name, int age) {
this.name = name;
this.age = age;
} }
2. 实现FactoryBean来注入实体类
/**
* @author 70KG
* @Title: FactoryBeanRegist
* @Description:
* @date 2018/7/22下午8:06
* @From www.nmyswls.com
*/
public class FactoryBeanRegist implements FactoryBean<Fish> { @Override
public Fish getObject() throws Exception {
return new Fish();
} @Override
public Class<?> getObjectType() {
return Fish.class;
} @Override
public boolean isSingleton() {
return true;
}
}
3. 编写配置类
/**
* @author 70KG
* @Title: FactoryBeanConfig
* @Description:
* @date 2018/7/22下午8:21
* @From www.nmyswls.com
*/
@Configuration
public class FactoryBeanConfig { @Bean
public FactoryBeanRegist getBean() {
return new FactoryBeanRegist();
} }
4. 测试
/**
* @author 70KG
* @Title: FactoryBean的测试类
* @Description:
* @date 2018/7/22下午8:22
* @From www.nmyswls.com
*/
public class Test01 { @Test
public void test() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(FactoryBeanConfig.class);
// 不加"&"获取到的是FactoryBean中的实例
Object getBean1 = ac.getBean("getBean");
// 加"&"获取到的是实现了FactoryBean接口的FactoryBeanRegist本身
Object getBean2 = ac.getBean("&getBean");
System.out.println(getBean1.getClass());
System.out.println(getBean2.getClass()); } }
5. 测试结果
class com.nmys.story.springCore.springioc.importBean.Fish
class com.nmys.story.springCore.springioc.factoryBean.FactoryBeanRegist
FactoryBean是用来向容器中注入Bean的接口。而BeanFactory是从容器中取Bean的接口。
Spring源码窥探之:FactoryBean的更多相关文章
- Spring 源码学习(2) —— FactoryBean 的使用
一般情况下, Spring是通过反射机制利用bean的class属性指定实现类来完成实例化bean的.在某些特定的情况下, 想做一些定制,Spring为此提供了一个org.springframewor ...
- Spring源码窥探之:注解方式的AOP原理
AOP入口代码分析 通过注解的方式来实现AOP1. @EnableAspectJAutoProxy通过@Import注解向容器中注入了AspectJAutoProxyRegistrar这个类,而它在容 ...
- Spring源码窥探之:声明式事务
1. 导入驱动,连接池,jdbc和AOP的依赖 <!-- c3p0数据库连接池 --> <dependency> <groupId>c3p0</groupId ...
- Spring源码窥探之:AOP注解
AOP也就是我们日常说的@面向切面编程,看概念比较晦涩难懂,难懂的是设计理念,以及这样设计的好处是什么.在Spring的AOP中,常用的几个注解如下:@Aspect,@Before,@After,@A ...
- Spring源码窥探之:@Profile
Spring为我们提供的多环境启动 1. 配置类,注入三个不同环境的数据源,并加上注解 /** * description: 以下准备了三套不同环境的数据源 * * @author 70KG * @d ...
- Spring源码窥探之:Spring AOP初步使用
AOP即面向切面编程.它的底层实际是用了spring的动态代理,具体是JDK的代理还是CGLIB的代理,就视情况而定了.本博客园仅仅作为平时记录,显得有些杂乱无章,如果想了解动态代理,设计模式,请访问 ...
- Spring源码窥探之:@Value
1. 首先定义实体 /** * @author 70KG * @Title: Apple * @Description: 苹果实体 * @date 2018/10/22下午9:26 * @From w ...
- Spring源码窥探之:BeanPostProcessor
Spring的Bean后置处理器 1. 实体类 /** * @author 70KG * @Title: Train * @Description: * @date 2018/7/23下午11:31 ...
- Spring源码窥探之:Spring AOP初步
AOP(Aspect Oriented Programming):即我们常说的面向切面编程. 什么是AOP?AOP是在我们原来写的代码的基础上,进行一定的包装,比如在方法执行前.方法返回后.方法抛出异 ...
随机推荐
- eslint 验证vue文件 报错 unexpected token =解决方法
解决方案:.eslintrc更改文件配置 { "extends": [ 'standard' ], "parserOptions": { "parse ...
- LeetCode 13. 罗马数字转整数(Roman to Integer)
13. 罗马数字转整数 13. Roman to Integer 题目描述 罗马数字包含以下七种字符: I,V,X,L,C,D 和 M. 字符 数值 I 1 V ...
- python学习-38迭代器和生成器
迭代器和生成器 ---- 迭代器协议和for循环工作机制 1.迭代器协议:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么引起一个Stoplteration异常,以终止迭代(只能往 ...
- Django连接多个数据库并实现读写分离
当一个项目当中有大量的数据的时候,你所有的IO操作都在一个数据库中操作,会造成项目的性能的降低.如果你能对项目中的数据进行读写分离的话,那么将大大提高你项目的性能.而Django自带的机制也对此提供了 ...
- leetcode无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- C#采集麦克风话筒声音
在项目中,我们会需要录制麦克风的声音.比如录制QQ聊天时自己说的话.那么如何采集呢?当然是采用SharpCapture!下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步:在引用了S ...
- iOS 打包静态库.a文件(真机版 + 虚拟机)
我们以打包IOS开发中封装的高地地图基础功能包 GDMap为例. 1>我们需要准备好需要打包的GDMap 2>接下来我们开始新建一个工程文件取名GDMap 3>删掉无 ...
- 3.建造模式(Builder)
注:图片来源于 https://www.cnblogs.com/-saligia-/p/10216752.html 建造模式UML图解析: 代码: Director.h // // Created b ...
- 使用sequelize对数据库进行增删改查
由于本人对于命令比较执着,所以基本都是在命令下操作的,喜欢使用命令的可以使用Cmder,需要安装.配置的可以参考这篇文章: https://www.cnblogs.com/ziyoublog/p/10 ...
- Java 之 web 相关概念
一.软件架构 1.C/S:客户端/服务器端 2.B/S:浏览器/服务器端(目前常用) 二.网络资源 1.静态资源 静态资源:所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可以直接被浏览器 ...