Spring的作用
Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度
。就是让对象和对象(模 块和模块)之间关系不是使用代码关联,而是通过配置来说明
。
例如以下例子
项目结构
AlphaDaoHibernate
和AlphaMyBatis
均实现AlphaDao
接口
场景1
原本项目使用的是Hibernate,现在要求使用MyBatis。那么按照原来的操作,我们需要在service层逐一修改调用了的地方
@Test
public void testApplicationContext() {
//逐一修改此处
AlphaDao alphaDao = applicationContext.getBean(AlphaDao.class);
System.out.println(alphaDao.select());
}
现在我们仅需要
新建AlphaMyBatis类实现AlphaDao
接口,通过配置@Primary注解
实现需求
此处便是:就是让对象和对象(模 块和模块)之间关系不是使用代码关联,而是通过配置来说明。
@Repository
//优先装配
@Primary
public class AlphaMyBatis implements AlphaDao{
@Override
public String select() {
return "MyBatis";
}
}
注意使用@Primary注解
和@Repository("alphaDaoHibernate")
当有两个类均实现了接口,且在业务中通过接口获取Bean(applicationContext.getBean(AlphaDao.class);
)需要指定获取的是哪一个Bean实例化,Bean默认是单例且ID唯一,否则报错。
场景2
在场景1的基础下,将Hibernate替换为MyBatis,但是现在仅有少数一处或几处还是需要使用Hibernate。
现在的处理办法是使用@Repository()
注解的属性。
//自定义类的名字
@Repository("alphaDaoHibernate")
public class AlphaDaoHibernate implements AlphaDao{
@Override
public String select() {
return "Hibernate";
}
}
@Test
public void testApplicationContext() {
AlphaDao alphaDao = applicationContext.getBean(AlphaDao.class);
System.out.println(alphaDao.select());
alphaDao = applicationContext.getBean("alphaDaoHibernate",AlphaDao.class);
System.out.println(alphaDao.select());
}