Spring中实例化Bean中的三种方式
Spring中实例化Bean中的三种方式
通过构造器实例化
可以直接使用默认的构造器实例化Bean
先创建Bean04类,为了等一下能够区分是哪种方式实例化的Bean,所以可以在该类中添加一个方法输出一条语句。
public class Bean04 {
// 构造器实例化
public void msg() {
System.out.println("构造器实例化Bean");
}
}
再编写配置文件bean04.xml,再该配置文件中写入如下内容。
<bean id="bean04" class="top.lukeewin.dao.Bean04"></bean>
最后编写测试类。
// 测试构造器实例化
@Test
public void test01() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean04.xml");
Bean04 bean04 = (Bean04) ctx.getBean("bean04");
bean04.msg();
}
通过静态工厂实例化
创建两个类,一个类作为Bean类,另一个作为静态工厂类,并且静态工厂类中必须有一个静态方法。静态方法返回一个Bean实例。
定义一个Bean类
public class Bean05 {
// 静态工厂实例化
public void msg() {
System.out.println("静态工厂实例化Bean");
}
}
定义一个静态工厂类
public class StaticBeanFactory {
// 静态工厂实例化
public static Bean05 getInstance() {
return new Bean05();
}
}
然后需要配置xml配置文件。
需要注意的是:配置文件中一定要记得加上factory-method
属性,并且该属性的值是静态工厂中的静态方法,即返回实例的方法。同时还需要注意class路径写的是静态工厂的类路径,而不是实例的类路径。
<bean id="bean05" class="top.lukeewin.dao.StaticBeanFactory" factory-method="getInstance"></bean>
最后编写测试代码
// 测试静态工厂实例化
@Test
public void test02() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean04.xml");
Bean05 bean05 = (Bean05) ctx.getBean("bean05");
bean05.msg();
}
通过实例工厂实例化
创建两个类,一个作为Bean类,另一个作为实例工厂类,**这里不需要定义为静态方法。**只需要设置一下配置文件即可。
定义一个Bean类
public class Bean06 {
// 实例工厂实例化
public void msg() {
System.out.println("实例工厂实例化Bean");
}
}
定义一个实例工厂类
public class BeanFactory01 {
// 实例工厂实例化
private Bean06 getInstance() {
return new Bean06();
}
}
然后编写配置文件。
配置文件中需要注意:分别定义两个bean标签,其中实例工厂类中的bean标签和其它普通bean标签一样,但是实例类中的bean标签必须要有factory-bean
属性,并且属性的值是实例工厂的id值。还需要有factory-method
属性,该属性的值指明了由实例工厂中的哪个方法产生实例。
<bean id="bean06_instance" class="top.lukeewin.dao.BeanFactory01"></bean>
<bean id="bean06" factory-bean="bean06_instance" factory-method="getInstance"></bean>
编写测试代码。
// 测试实例工厂实例化
@Test
public void test03() {
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean04.xml");
Bean06 bean06 = (Bean06) ctx.getBean("bean06");
bean06.msg();
}
最后三种方式的运行结果如图所示。
【Spring系列教程01】Spring中实例化对象的三种方式
本文章对应的视频, 请点击这里。
更多内容欢迎访问我的 个人博客,以及我的 个人B站
Luke Ewin: 模型id写错了,不存在这个模型id
aibao_b: 指定本地模型加载,但是提示错误: File "/home/gm/anaconda3/envs/whisperPro/lib/python3.11/site-packages/huggingface_hub/utils/_validators.py", line 106, in _inner_fn validate_repo_id(arg_value) File "/home/gm/anaconda3/envs/whisperPro/lib/python3.11/site-packages/huggingface_hub/utils/_validators.py", line 154, in validate_repo_id raise HFValidationError( huggingface_hub.errors.HFValidationError: Repo id must be in the form 'repo_name' or 'namespace/repo_name': '~/whisper-mode/fast-whisper-small'. Use `repo_type` argument if needed. python调用如下: # 配置 Whisper 模型 # model_size = "small" model_size = "small" path = r"~/whisper-mode/fast-whisper-small" model = WhisperModel(model_size_or_path=path, device="cpu", compute_type="float16",local_files_only=True)
于干439: 你好,能否付费不是fasterwhisper到服务器使用cpu渲染,2核心4gb不知道是否够用,如果可以部署请联系我盘
Luke Ewin: 按esc后输入:x保存退出,如果不想保存,输入:q!
weixin_52341563: 进入VIM之后怎么退出啊