Spring详解-------依赖注入的三种方式实例详解

次元: 365bet娱乐注册 时间戳: 2025-10-05 00:22:11 观察者: admin 访问量: 5175 能量值: 418
Spring详解-------依赖注入的三种方式实例详解

public interface UserDao {

void InitUserDao();

}

持久层userDaoIml实现

public class UserDaoImpl implements UserDao {

@Override

public void InitUserDao() {

System.out.println("InitUserDao......");

}

}

3.1通过 Set 方法注入

持久层的UserDao使用上面的内容。

业务层UserService接口

public interface UserService {

public void addUser();

}

业务层UserServiceImpl实现

使用set方法进行依赖注入的时候必须给需要注入的对象创建set方法

public class UserServiceImpl implements UserService {

private UserDao userDao;

//使用set方法实现依赖注入

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

@Override

public void addUser() {

userDao.InitUserDao();

System.out.println("UserService........addUser");

}

}

配置文件(配置UserServiceImpl对象)

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">

测试依赖注入(测试UserDao是否注入成功)

public class UserServiceTest {

public static void main(String[] args) {

//启动IOC容器

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

//从容器中获取 userService对象 使用getBean("");来获取容器中存在的对象

//在IOC容器中除了可以用bean的id来获取对象还可以使用bean的name属性来获取对象

//(1)可以通过bean的id属性值来获取IOC容器中的对象

UserService userService = (UserService) applicationContext.getBean("userService");

userService.addUser();

//(2)可以通过bean的name属性值来获取IOC容器中的对象

UserService name1 = (UserService) applicationContext.getBean("name1");

System.out.println("调用name1");

name1.addUser();

UserService name2 = (UserService) applicationContext.getBean("name2");

System.out.println("调用name2");

name2.addUser();

UserService name3 = (UserService) applicationContext.getBean("name3");

System.out.println("调用name3");

name3.addUser();

}

}

3.2通过构造方法注入

持久层

使用构造方法进行注入的时候Bean对象必须有一个带参的构造方法

public class UserServiceImpl implements UserService {

private UserDao userDao;

//使用构造方法实现依赖注入

public UserServiceImpl(UserDao userDao){

this.userDao = userDao;

}

@Override

public void addUser() {

userDao.InitUserDao();

System.out.println("UserService........addUser");

}

}

配置文件

使用构造方法进行注入的时候参数对象要使用 constructor-arg 一个constructor-arg注入一个参数

测试构造方法注入

public class UserServiceTest {

public static void main(String[] args) {

//启动IOC容器

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

//从容器中获取 userService对象 使用getBean("");来获取容器中存在的对象

UserService userService = (UserService) applicationContext.getBean("userService");

userService.addUser();

}

}

3.3自动注入

自动注入的方式有两种,一种是全局配置自动注入,另一种是局部配置自动注入。 无论全局配置或局部单独配置,都有

5 个值可以选择:no或byName或byType或 constructor或 default

局部自动注入 : 通过 bean 标签中的 autowier 属性配置自动注入。有效范围:仅针对当前 bean 标签生效。

全局自动注入 :通过 beans 标签中的 default-autowire 属性配置自动注入。有效范围:配置文件中的所有 bean 标签都生效。

no:当 autowire 设置为 no 的时候,Spring 就不会进行自动注入。

byName:在 Spring 容器中查找 id 与(需要注入的bean)属性名相同的 bean,并进行注入。需要提供 set 方 法。

byType:在 Spring 容器中查找类型与属性名的类型相同的 bean,并进行注入。需要提供 set 方法。

constructor:仍旧是使用 byName 方式,只不过注入的时候,使用构造方式进行注入。

default:全局配置的 default 相当于 no,局部的 default 表示使用全局配置设置。

局部自动注入

通过

bean

标签中的

autowier

属性配置自动注入。

全局自动注入(default-autowire="byName")

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"

default-autowire="byName">

4 依赖注入的数据类型

依赖注入的数据类型:

1.注入bean对象

2.注入基本数据类型和字符串

3.注入list集合

4.注入Set集合

5.注入Map集合

6.注入properties

业务层userServiceImp实现

所有的Bean对象都需要set方法

public class UserServiceImpl implements UserService {

private UserDao userDao;

private String name;

private int age;

private List list;

private Set set;

private Set users;

private Map map;

private Map mapUser;

private Properties properties;

//使用构造方法实现依赖注入

public UserServiceImpl(UserDao userDao){

this.userDao = userDao;

}

//使用set方法实现依赖注入

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

public void setName(String name) {

this.name = name;

}

public void setAge(int age) {

this.age = age;

}

public void setList(List list) {

this.list = list;

}

public void setSet(Set set) {

this.set = set;

}

public void setUsers(Set users) {

this.users = users;

}

public void setMap(Map map) {

this.map = map;

}

public void setMapUser(Map mapUser) {

this.mapUser = mapUser;

}

public void setProperties(Properties properties) {

this.properties = properties;

}

@Override

public void addUser() {

userDao.InitUserDao();

System.out.println("注入基本数据类型"+name+age);

System.out.println("注入list");

for (int i = 0 ; i

System.out.println(list.get(i));

}

System.out.println("UserService........addUser");

}

}

配置文件

javaSE

javaEE

lance

admin

lance

24

测试依赖注入的数据类型:

/**依赖注入

* 在使用依赖注入时,如果注入的是 Bean 对象,

* 那么要求注入的 Bean 对象与被注入的 Bean 对象都需要 Spring IOC 容器来实例化。

* 注入方式:

* 1.使用set方式注入:需要为注入的成员变量提供 Set 方法。

* 2.使用构造方法注入:Bean 对象中需要提供有参的构造方法

*/

public class DependencyInjectionTest {

public static void main(String[] args) {

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext_dependency_injection.xml");

UserService userService = (UserService) applicationContext.getBean("userServiceData");

userService.addUser();

}

}

相关维度

携程带走PMS两年后,众荟瞄准开放型数据生态

携程带走PMS两年后,众荟瞄准开放型数据生态

世界杯足球赛 巴西2比0胜塞尔维亚

世界杯足球赛 巴西2比0胜塞尔维亚

nec显示器怎么样:对NEC显示器的四点解析

nec显示器怎么样:对NEC显示器的四点解析

笔记本键盘帽安装图解

笔记本键盘帽安装图解