一.配置对象的基本概念
1.配置对象的三种方式
① XML配置方式(经典场景)
② 注解配置方式(JDK1.5+)
③ Java Config 配置方式(Spring4+)
2.配置对象的作用
利用Spring将引用解耦(对象以对象之间的引用是通过Spring IOC容器在运行时通过反射技术动态实现注入,从而实现解耦),降低耦合(低耦合,高内聚)性,减少资源开销,被引用对象做修改时引用对象无须修改就可以实现业务的升级,开发人员只需关注自己的业务即可。
3.三种配置的比较
二.XML配置方式实现
项目构建:使用IDEA创建一个Maven项目,项目名为spring-xml,项目创建完成后如下图所示
依赖导入:在pom.xml中导入Spring的依赖支持
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.20</version>
</dependency>
</dependencies>
Spring配置文件:在resources文件下创建名为applicationContext.xml配置文件
applicationContext.xml详细内容:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>
dao层:包含IEmpDao接口和EmpDao实现类
IEmpDao接口:
EmpDao实现类:
Application:创建一个Application类,作为程序的入口:
- 以前创建对象(通过new方式创建对象):
运行效果:
- 通过配置文件创建对象:
在applicationContext.xml配置文件中添加一个Bean对象:
在Application类中,就可以通过配置文件创建对象了( getBean()方法的行参就是配置文件中bean标签的name值
):
运行效果:
service:包含一个员工业务类EmpService,通过业务类来实现员工添加。
EmpService.java( 一定不能少了setIEmpDao()方法,不然无法注入参数
)
在applicationContext.xml配置文件中,声明一个EmpService的bean对象通过 <property>
标签来初始化iEmpDao对象!( 配置文件方式创建EmpService对象
)
在Application中通过配置文件创建EmpService对象,进而实现添加员工业务。
运行效果:
注意在Application类中并没有使用setIEmpDao()方法来初始化IEmpDao对象,因为在配置文件中我们已经配置了EmpService的IEmpDao参数,所以在ApplicationContext对象创建后就已经初始化该对象。
运行效果:
使用配置文件创建对象的优点:在dao层新增一个IEmpDao的实现类EmpDaoExt作为EmpDao的替换类
将EmpDao更换为EmpDaoExt只需要在applicationContext.xml配置文件中将bean对象的class换成EmpDaoExt即可
在Application中实现如下代码:
运行效果( 通过上面的操作我们发现使用配置文件的方式创建对象,在更换dao中类的时候,无须修改servier层中的代码,只需要在配置文件中进行简单修改即可,这样的好处就是开发人只关心具体业务即可,无须关心下层提供的接口是如何实现的
):
三.注解方式实现
1.Spring IOC注解
2.使用IOC注解的“套路”
- pom.xml 引入 spring-context
【已经完成】
- applicationContext.xml配置文件中设置
<component-scan>
- 使用@XXX注解让Spring IOC创建对象
- 利用@Resource 注入对象
根据上面的注解套路实现注解方式创建对象:
- 步骤二(步骤1在前面已经完成):
( 这一步的作用就是扫描对应包中的注解
)
步骤三:
如果标签没有加参数,默认name为类小驼峰命名的变量名,如下的bean的name=empDaoExt
持久层添加 @Repository
注解(类似于前面的 <bean name="empDao" class="com.dudu.dao.EmpDaoExt"/>
)
( @Repository
没有设置参数,默认bean对象的name为empDaoExt )
业务层添加注解@Service(类似于前面的 <bean name="empService" class="com.dudu.dao.EmpService"/>
)
- 步骤四:
@Resource标签的name在这里一定要指向对应dao中的EmpDao或EmpDaoExt中的一个bean的name名,不然会报错(dao中只有一个的情况下,可以不填name,因为会按类型进行注入)。
对象的注入使用 @Resource
标签,作用相当于前面配置文件中的 <property>
,并且该方式不需要使用setIEmpDao()方法:
Application中执行main方法:
运行效果:
四.Java Config方式实现
1.Java Config配置套路
- pom.xml 引入spring-context
- 创建Config类,无需创建XML
- @Configuration类说明
- @Bean声明对象
- AnnotationConfigApplicationContext加载配置类
创建一个Maven项目,项目名为spring-javaconfig,创建成功如下图所示:
根据上面的套路,完成对象的创建:
- 步骤1:pom.xml 引入spring-context
- 步骤2,3,4
dao层:IEmpDAO接口,二个接口实现类EmpDAO,EmpDAOExt
Service层:EmpService业务层
创建SpringConfig类:
@Configuration
替代XML,成为IOC容器主要配置来源@Bean
用于初始化对象,bena的name默认为方法名称,在方法的内部手动进行实例化的操作,并将对象return返回
- 步骤5: AnnotationConfigApplicationContext加载配置类
运行效果: