起因
偶然间,用到了@Configuration
创建Bean
,对于@Configuration
又学到了一些知识点。
单例模式
网上查资料,理解有误差,以为单例模式一个类只有一个实例,只能创建一个Bean;但是如果同一个类需要创建多个对象的时候,该怎么办?
后来经过大佬的点拨,再加上查找资料,发现:
在Spring中,bean可以被定义为两种模式:prototype(多例)和singleton(单例)。
singleton(单例):只有一个共享的实例存在,所有对这个bean的请求都会返回这个唯一的实例。
prototype(多例):对这个bean的每次请求都会创建一个新的bean实例,类似于new。
Spring bean 默认是单例模式。
Spring下默认的bean均为singleton,可以通过singleton=“true|false” 或者 scope="?"来指定。
@Configuration
public class MyConfig
{
@Bean
public UserDao createUserDao ()
{
return new UserDao();
}
@Bean
public UserDao createUserDao2 ()
{
return new UserDao();
}
@Service
public class UserService
{
@Autowired
@Qualifier(value = "createUserDao2") //使用Qualifier指定bean对象
private UserDao userDao;
@Autowired
@Qualifier(value = "createUserDao") //使用Qualifier指定bean对象
private UserDao userDao;
}
既然讲到了单例模式,我们来看一下。
单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
import注解用法
不知道大家有没有碰到过这种情况,我在一个工具包里面使用@Configuration
写好了一个config类,但是我在项目里面如何使用这个类呢?这个时候我知道了@Import
,通过快速导入的方式实现把实例加入spring的IOC容器中,加入IOC容器的方式有很多种,@Import
注解就相对很牛皮了,可以用于导入第三方包 ,当然@Bean
注解也可以,但是@Import
注解快速导入的方式更加便捷。
使用方法:
@Import({ 类名.class , 类名.class... })
@Configuration
public class TestDemo {
}
这样一来,对应的类的bean
都将加入到spring
容器中,这些在容器中bean
名称是该类的全类名 ,比如com.zd.类名。