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是在我们原来写的代码的基础上,进行一定的包装,比如在方法执行前.方法返回后.方法抛出异 ...
随机推荐
- 用easyui从servlet传递json数据到前端页面的两种方法
用easyui从servlet传递json数据到前端页面的两种方法 两种方法获取的数据在servlet层传递的方法相同,下面为Servlet中代码,以查询表中所有信息为例. //重写doGet方法 p ...
- cetos7 Mysql5.7安装
centos7 MySQL安装 一.检查是否已经存在mysql,若存在卸载,避免安装时产生一些错误 rpm -qa | grep -i mysql 若存在,使用rpm -e packname –nod ...
- 【C++札记】多态
C++中多态是面向对象设计思想的重要特性,同名具有不同功能函数,该函数调用过程执行不同的功能.多态的原理是通过一张虚函数表(Virtual Table)实现的.动多态会牺牲一些空间和效率来最终实现动态 ...
- 线性DP详解
顾名思义,线性DP就是在一条线上进行DP,这里举一些典型的例子. LIS问题(最长上升子序列问题) 题目 给定一个长度为N的序列A,求最长的数值单调递增的子序列的长度. 上升子序列B可表示为B={Ak ...
- python网课自动刷课程序-------selenium+chromedriver
python的强大之处就在于有许多已经写好的功能库提供,这些库强大且易用,对于写一些有特定功能的小程序十分方便. 现在就用pyhton的selenium+谷歌游览器写一个可以自动刷课的程序,以智慧树上 ...
- 高仿linux下的ls -l命令——C语言实现
主要用到的函数可以参考头文件,仅仅支持ls -l这功能,扩展就交给大家了0.0 相关测试图片: 话不多说,直接上码 #include <stdio.h> #include < ...
- hadoop 异常
2019-09-20 22:49:51,955 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Problem connecting to ...
- voltile解析
https://www.cnblogs.com/dolphin0520/p/3920373.html
- helm chart应用使用示例
有两种方法 一是按照正常流程直接用yaml文件的形式发布应用到k8s集群上 二是把生成好的yaml文件发布到kubeapps应用商店,在应用商店中操作发布应用到k8s集群中 这里采用第二种方式的变种方 ...
- Flutter 与 Android 的交互
https://juejin.im/post/5cd91de4518825686b120921 https://juejin.im/entry/5b64292be51d451995676398