Spring依赖注入的两种种方式
2020-09-06 16:40
417 查看
Spring依赖注入的两种种方式
依赖注入的作用就是在使用spring框架时,动态的将其所依赖的对象注入到bean组件中,其实现方式有三种,一种是属性setter方式注入,一种是构造方法注入。
- setter方式注入:是指Spring容器使用setter方法注入被依赖的实例。通过调用无参构造器或无参静态工厂实例化Bean后,调用该Bean的setter方法,即实现了setter方法注入。在本例中就是调用UserServiceImpl的无参构造器实例化Bean后,也就是创建好对象后,使用该对象的setter方法。
- 构造方法注入:是指Spring容器使用构造方法注入被依赖的实例。
一、setter方式注入
1.在自己创建的包下分别添加Dao包和Service包
1.1 Dao包下编写UserDao接口和UserDaoImpl实现类并为其添加方法
package com.fly.dao; public interface UserDao { public void say(); }
package com.fly.dao; public class UserDaoImpl implements UserDao { @Override public void say() { System.out.println("Dao层查询数据库成功!"); } }
1.2 然后在resource包下添加Spring的配置文件,并创建一个名为userDao的Bean
<?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"> <bean id="userDao" class="com.fly.dao.UserDaoImpl"/> </beans>
1.3 service包下同样编写UserService接口和UserService接口实现类UserServiceImpl
package com.fly.service; public interface UserService { public void say(); }
1.4 在实现类UserServiceImpl中声明UserDao方法,并添加属性setter方法
package com.fly.service; import com.fly.dao.UserDao; public class UserServiceImpl implements UserService { //声明UserDao属性 private UserDao userDao; //为UserDao属性添加setter方法 public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public void say() { this.userDao.say(); System.out.println("Service层调用Dao层查询数据成功"); } }
1.5 然后在spring的配置文件创建一个名为userService的Bean,该Bean用于实例化UserServiceImpl类的信息,并将实例化的userDao注入到userService中
<?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"> <!--id名是bean的唯一标识,名字可以任意写,但是要一一对应--> <bean id="userService" class="com.fly.service.UserServiceImpl"> <property name="userDao" ref="userDao"/> </bean> <bean id="userDao" class="com.fly.dao.UserDaoImpl"/> </beans>
2.编写测试代码
import com.fly.service.UserService; import com.fly.service.UserServiceImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SetTest { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //UserService userService = new UserServiceImpl(); UserService userService = (UserServiceImpl) ac.getBean("userService"); userService.say(); } }
注:在上面的代码中UserService userService = (UserServiceImpl) ac.getBean(“userService”);等价于UserService userService = new UserServiceImpl();
也就是说Bean会为我们new一个对象,而不用我们创建
二、构造方法注入
1. 在UserServiceImpl类中创建构造函数
package com.fly.service; import com.fly.dao.UserDao; public class UserServiceImpl implements UserService { //声明UserDao属性 private UserDao userDao; //创建UserServiceImpl类的构造函数 public UserServiceImpl(UserDao userDao) { this.userDao = userDao; } @Override public void say() { this.userDao.say(); System.out.println("Service层调用Dao层查询数据成功"); } }
2.编写Spring的配置文件
<?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"> <bean id="userService" class="com.fly.service.UserServiceImpl"> <constructor-arg ref="userDao"/> </bean> <bean id="userDao" class="com.fly.dao.UserDaoImpl"/> </beans>
3.编写测试代码
import com.fly.service.UserService; import com.fly.service.UserServiceImpl; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class SetTest { public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); //UserService userService = new UserServiceImpl(); UserService userService = (UserServiceImpl) ac.getBean("userService"); userService.say(); } }
Dao层查询数据库成功! Service层调用Dao层查询数据成功
相关文章推荐
- Spring依赖注入的两种方式
- Spring IOC 依赖注入的两种方式XML和注解
- Spring中依赖注入的两种方式的区别
- 详解Spring基于xml的两种依赖注入方式
- 7.3.4: spring的核心机制依赖注入---两种注入方式的对比
- Spring两种依赖注入方式的比较
- spring两种常用依赖注入方式
- Spring的两种依赖注入方式:setter方法注入与构造方法注入 以及两种方式的区别!
- [优质例子存档]Spring的两种依赖注入方式:setter方法注入与构造方法注入
- Spring的两种依赖注入方式:setter方法注入与构造方法注入
- Spring依赖注入的两种方式(根据实例详解)
- Spring依赖注入常用的两种方式
- Spring的两种依赖注入方式:setter方法注入与构造方法注入 以及两种方式的区别!
- (5) 编码剖析Spring装配基本属性的原理【附加:注入依赖对象的两种方式】
- spring依赖注入的两种方式
- 在Spring中装配DAO以及两种依赖注入方式
- Spring 依赖注入的两种方式
- 【Spring学习笔记三】-依赖注入的两种方式
- Spring中IoC两种接口和两种依赖注入方式的比较
- Spring依赖注入的两种方式比对