通常我们在程序中会使用new关键字来实现一个类依赖于另一个类,这样虽然可以实现需求。但是也存在一个问题,就是不容易统一管理。而Spring提出了依赖注入的思想,使用Spring容器来进行注入,也称为控制反转。
常用的注入方法有两种:构造函数法和set注入
1、构造函数法
在需要注入的java类中创建构造函数,如下:
- package com.tgb.spring.manager;
-
- import com.tgb.spring.dao.IUserDao;
-
- public class UserManagerImp implements IUserManager {
-
- private IUserDao userDao;
-
-
- public UserManagerImp(IUserDao userDao){
- this.userDao=userDao;
- }
-
- @Override
- public void addUser(String username, String password) {
- userDao.addUser(username, password);
- }
-
- }
在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"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
-
- <bean id="userDao4Mysql" class="com.tgb.spring.dao.UserDao4MySqlImp"/>
- <bean id="usrDao4Oracle" class="com.tgb.spring.dao.UserDao4OracleImp"/>
-
- <bean id="userManager" class="com.tgb.spring.manager.UserManagerImp">
-
-
- <constructor-arg ref="userDao4Mysql"/>
-
- </bean>
- </beans>
注意:
(1)在需要注入的类中创建构造函数。
(2)在Spring配置文件中使用<constructor-arg>标签来设置需要注入的类
2、set方法设置
在需要注入的java类中添加set方法,如下:
- package com.tgb.spring.manager;
-
- import com.tgb.spring.dao.IUserDao;
-
- public class UserManagerImp implements IUserManager {
-
- private IUserDao userDao;
-
-
-
- public void setUserDao(IUserDao userDao) {
- this.userDao = userDao;
- }
-
- @Override
- public void addUser(String username, String password) {
- userDao.addUser(username, password);
- }
-
-
- }
在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"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
-
- <bean id="userDao4Mysql" class="com.tgb.spring.dao.UserDao4MySqlImp"/>
- <bean id="usrDao4Oracle" class="com.tgb.spring.dao.UserDao4OracleImp"/>
-
- <bean id="userManager" class="com.tgb.spring.manager.UserManagerImp">
-
-
-
- <property name="userDao" ref="usrDao4Oracle"/>
- </bean>
- </beans>
注意:
(1)在需要注入的类中必须实现set方法
(2)在Spring配置文件中使用<property>标签进行类指向。
小结:
通过上述配置实现,我们很容易发现使用Spring注入相对于之前使用new方式的优势,大量减少Factory和Singleton数量,使代码层次更加清晰。查找、定位、创建和管理对象关系,都由IOC管理。而且,使用配置的形式,使我们的操作更加灵活方便。