通过FactoryMethod创建对象示例
1.1 FactoryBean接口的使用2.4 Spring5 自定义标签案例3.7 spring 识别自定义实现BeanFactoryPostProcessor 的接口4.8 springboot源码解析(四):监听器5.11 replace-method标签使用6.10 lookup-method标签使用
7.通过FactoryMethod创建对象示例
8.通过Supplier创建对象示例9.InstantiationAwareBeanPostProcessor 接口实现10.对象Constructor构造函数和@PostConstruct&@PreDestroy解析详解11.自定义转换器Converter实现案例12.三级缓存解析过程13.JDK proxy 和cglib 源码解读factory-bean: 指定使用哪个工程实例,实例工厂,非静态方法创建bean
factory-method:指定使用哪个工厂实例的方法。静态工厂,静态方法创建bean
判断的依据是 创建bean的方法是否存在 static 修饰符。
具体code 如下:
package com.gientech.factoryMethod;
public class Person {
private int id;
private String name;
private int age;
private String gender;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
创建静态方法
package com.gientech.factoryMethod;
public class PersonStaticFactory {
public static Person getPerson(String name){
Person person = new Person();
person.setId(1);
person.setName(name);
return person;
}
}
package com.gientech.factoryMethod;
public class PersonInstanceFactory {
public Person getPerson(String name){
Person person = new Person();
person.setId(2);
person.setName(name);
return person;
}
}
创建配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- factory-method : 静态工厂, 指定使用哪个工厂实例的方法 -->
<bean id="person" class="com.gientech.factoryMethod.PersonStaticFactory" factory-method="getPerson">
<constructor-arg value="zhangsan"></constructor-arg>
</bean>
<!-- factory-bean : 实例工厂,指定使用哪个工程实例, -->
<bean id="personInstanceFactory" class="com.gientech.factoryMethod.PersonInstanceFactory"></bean>
<bean id="person2" class="com.gientech.factoryMethod.Person" factory-bean="personInstanceFactory" factory-method="getPerson">
<constructor-arg value="lisi"></constructor-arg>
</bean>
</beans>
创建测试类
package com.gientech.factoryMethod;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class FactoryMethodTest {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("factoryMethod.xml");
Person person = ac.getBean("person", Person.class);
System.out.println(person);
Person person2 = ac.getBean("person2", Person.class);
System.out.println(person2);
}
}
作者:zgcy123456
出处:https://www.cnblogs.com/zgcy123456/p/18079072
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
合集:
Spring5 源码
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!