此时在xml中定义相应的bean可以使用静态工厂方法来实现
使用实例工厂创建bean示例:
package com.wjw.entity.factory;
import com.wjw.entity.User;
public class UserFactory {
public User getUser(){
return new User();
}
}
由于方法不是静态的,所以不能直接调用,只能先创建一个工厂的对象,然后通过对象再进行调用
测试:
package com.wjw;
import com.wjw.controller.WelcomeController;
import com.wjw.entity.User;
import com.wjw.service.WelcomeService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.FileSystemXmlApplicationContext;
@Configuration
@ComponentScan(“com.wjw”)
public class Entrance {
public static void main(String[] args) {
System.out.println(“Hello World!”);
String xmlPath = “F:\Java\spring-framework-5.2.0.RELEASE\springdemo\src\main\resources\spring\spring-config.xml”;
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(xmlPath);
WelcomeService welcomeService = (WelcomeService) applicationContext.getBean(“welcomeService”);
welcomeService.sayHello(“强大的spring框架”);
//得到无参构造函数创建的对象:
User user1a = (User) applicationContext.getBean(“user1”);
User user1b = (User) applicationContext.getBean(“user1”);
//得到静态工厂创建的对象:
User user2a = (User) applicationContext.getBean(“user2”);
User user2c = (User) applicationContext.getBean(“user2”);
//得到实例工厂创建的对象:
User user3a = (User) applicationContext.getBean(“user3”);
User user3b = (User) applicationContext.getBean(“user3”);
System.out.println(“无参构造函数创建的对象:” + user1a);
System.out.println(“无参构造函数创建的对象:” + user1b);
System.out.println(“静态工厂创建的对象:” + user2a);
System.out.println(“静态工厂创建的对象:” + user2c);
System.out.println(“实例工厂创建的对象:” + user3a);
System.out.println(“实例工厂创建的对象:” + user3b);
}
}
继承了两个接口,spring中充斥着大量接口,继承某个接口就意味着具有某一项功能。
-
AttributeAccessor
定义了最基本的对任意对象元数据的修改或者获取方式,用在这里主要就是为了获取BeanDefinition的属性,并操作这些属性。 -
BeanMetadataElement
主要定义了一个getSource
方法,用于返回一个可配置的源对象,用在这里主要就是为了返回BeanDefinition对象本身。 -
AttributeAccessorSupport
是AttributeAccessor
的实现类。 -
AbstractBeanDefinition
是BeanDefinition实现类的基类,定义了一些初始化通用属性的构造函数,以及对应的getter和setter,还有一些操作的通用方法。基于AbstractBeanDefinition
抽象类,spring实现了一些有特殊用途的BeanDefinition。 -
RootBeanDefinition
可以单独作为BeanDefinition,也可以作为其他BeanDefinition的父类,但不能作为其他的子类。(通常用来在运行时接收多个BeanDefinition合并起来的信息,可以接收具有继承关系的多个BeanDefinition,承接他们合并在一起的除了parent属性以外的属性)。一般情况下,配置文件里的bean标签会被解析成为RootBeanDefinition
,但spring2.5之后使用GenericBeanDefinition
来代替了,但因为先前的根基,所以在合并BeanDefinition时还是会用RootBeanDefinition
来接收。
ps:spring中的继承是通过设置parent属性来决定的,不是extends
- `ChildBeanDefinition` 已经被取代了。
GenericBeanDefinition
(bean文件配置属性定义类)除了具有BeanDefinition属性之外还有parent属性,方便程序运行时去设定parent BeanDefinition,不会报异常,是一种更好的方案。
总结
阿里伤透我心,疯狂复习刷题,终于喜提offer 哈哈~好啦,不闲扯了
1、JAVA面试核心知识整理(PDF):包含JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。
2、Redis学习笔记及学习思维脑图
3、数据面试必备20题+数据库性能优化的21个最佳实践
密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。
[外链图片转存中…(img-B0Dm4zJ0-1720084305506)]
2、Redis学习笔记及学习思维脑图
[外链图片转存中…(img-tqEft24X-1720084305506)]
3、数据面试必备20题+数据库性能优化的21个最佳实践
[外链图片转存中…(img-o1wXlaRS-1720084305507)]