FactoryBean
在 Spring Framework 中,FactoryBean
是一个用于创建其他 Bean 实例的特殊工厂 Bean。它允许开发者自定义 Bean 的创建逻辑,从而更加灵活地管理和配置 Bean 的实例化过程。
FactoryBean 接口
FactoryBean
接口是 Spring 框架中的一个重要接口,它定义了两个方法:
-
getObject():这个方法负责返回由工厂创建的 Bean 的实例,可以是任意的对象,不限于特定的类或接口。
-
getObjectType():这个方法返回由工厂创建的 Bean 的类型。如果工厂创建的对象不是一个明确的类,可以返回 null。
我们在当前包下创建一个新的类
Factory工厂
这个bean有创建对象的功能
我们要去实现一个接口
package com.bigdata1421.bean;
import org.springframework.beans.factory.FactoryBean;
public class DogFactoryBean implements FactoryBean<Dog> {
@Override
public Dog getObject() throws Exception {
return null;
}
@Override
public Class<?> getObjectType() {
return null;
}
}
这个类的作用是为了创建另一个对象
创建泛型对象
package com.bigdata1421.bean;
import org.springframework.beans.factory.FactoryBean;
public class DogFactoryBean implements FactoryBean<Dog> {
//写当前工厂造出来的bean是什么
@Override
public Dog getObject() throws Exception {
return new Dog();
}
//问造出来的是什么类型
@Override
public Class<?> getObjectType() {
return Dog.class;
}
@Override
public boolean isSingleton() {
return FactoryBean.super.isSingleton();
}
}
FactoryBean类一旦被spring容器加载
造出来的对象不是他自身
而是他的泛型类型
意思就是提前利用工厂bean做好对bean的初始化 提前声明好后方便服务层注入使用
实现
package com.bigdata1421.config;
import com.bigdata1421.bean.Dog;
import com.bigdata1421.bean.DogFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Component;
@ComponentScan({"com.bigdata1421.bean","com.bigdata1421.config"})
public class SpringConfig3 {
@Bean
public DogFactoryBean dog(){
return new DogFactoryBean();
}
}
小结
在 Spring Framework 中,单例对象(Singleton)是一种被 Spring 容器管理的对象实例化方式,具有以下特点和意义:
-
单例模式特性:
-
当一个 Bean 被定义为单例时,Spring 容器将会在应用程序的生命周期中,只创建该 Bean 的一个实例。
-
每次请求该 Bean 时,Spring 都会返回同一个实例对象。
-
-
作用:
-
性能优化:单例模式减少了对象的创建和销毁次数,因此可以提升应用程序的性能,特别是当一个 Bean 的创建成本较高时,比如涉及到数据库连接、网络连接等资源。
-
对象共享:保证应用中各个部分使用的是同一个实例,确保数据的一致性和状态的统一性。
-
配置简化:通过单例模式,避免了手动管理对象的生命周期和状态,Spring 容器负责管理对象的创建、依赖注入和销毁,简化了配置和代码的复杂度。
-
-
默认行为:
-
在 Spring 中,如果没有显式地指定作用域(Scope),默认情况下 Bean 是单例的。这意味着大多数情况下,当你使用
@Component
或其衍生注解(如@Service
、@Repository
、@Controller
)标记一个类时,Spring 将会把它作为单例 Bean 注册到容器中。
-
-
注意事项:
-
单例 Bean 应该是状态无关的,或者在设计上避免状态共享,以避免潜在的并发问题。
-
如果一个 Bean 需要维护状态,应该设计成原型(Prototype)作用域,这样每次注入或请求时都会创建一个新的实例。
-
多例对象
在 Spring Framework 中,除了单例对象(Singleton)之外,还可以定义多实例对象(Prototype)。多实例对象的特点是,每次获取该 Bean 时,Spring 容器都会创建一个新的实例,而不是返回同一个实例。
多实例对象适用于需要频繁创建和销毁的 Bean 或者需要维护状态的 Bean。通过多实例作用域,可以确保每次请求 Bean 时都会得到一个全新的实例,从而避免状态共享和并发问题。
要定义一个多实例对象,可以使用 @Scope
注解并将作用域设置为 prototype
。
个人号推广
博客主页
多多!-CSDN博客
Web后端开发
https://blog.csdn.net/qq_30500575/category_12624592.html?spm=1001.2014.3001.5482
Web前端开发
https://blog.csdn.net/qq_30500575/category_12642989.html?spm=1001.2014.3001.5482
数据库开发
https://blog.csdn.net/qq_30500575/category_12651993.html?spm=1001.2014.3001.5482
项目实战
https://blog.csdn.net/qq_30500575/category_12699801.html?spm=1001.2014.3001.5482
算法与数据结构
https://blog.csdn.net/qq_30500575/category_12630954.html?spm=1001.2014.3001.5482
计算机基础
https://blog.csdn.net/qq_30500575/category_12701605.html?spm=1001.2014.3001.5482
回忆录
https://blog.csdn.net/qq_30500575/category_12620276.html?spm=1001.2014.3001.5482