set注入和构造注入

编程入门 行业动态 更新时间:2024-10-24 08:31:54

<a href=https://www.elefans.com/category/jswz/34/1767491.html style=set注入和构造注入"/>

set注入和构造注入

2023.11.8

        控制反转是一种思想,有利于降低程序耦合度,提高程序扩展力。控制反转,反转的是:

  • 将对象的创建权利交出去,交给第三方容器负责。
  • 将对象和对象之间关系的维护权交出去,交给第三方容器负责。

        而依赖注入实现了控制反转的思想。Spring通过依赖注入的方式来完成Bean管理。

依赖注入常见的实现方式包括两种:

  • 第一种:set注入
  • 第二种:构造注入

本章对两种注入方式进行一个实现。

set注入

        创建持久层UserDao:

package spring6.dao;import org.slf4j.LoggerFactory;
import org.slf4j.Logger;public class UserDao {private static final Logger logger =  LoggerFactory.getLogger(UserDao.class);public void insert(){logger.info("数据库正在保存用户信息!");}
}

        创建逻辑层UserService:

package spring6.service;import spring6.dao.UserDao;public class UserService {private UserDao userDao;//使用set注入,必须提供一个set方法public void setUserDao(UserDao userDao) {this.userDao = userDao;}public void saveUser(){userDao.insert();}
}

接下来需要在spring.xml中配置bean文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xsi:schemaLocation=" .xsd"><bean id="userBean" class="spring6.dao.UserDao"></bean><!--    想让spring调用对应的set方法,需要配置property标签。-->
<!--    name属性的值为:set方法名去掉set,再将剩下的单词首字母变小写。-->
<!--    ref指定的是要注入的bean的id--><bean id="userServiceBean" class="spring6.service.UserService"><property name="userDao" ref="userBean"/></bean>
</beans>

测试程序:

        

@Testpublic void testSetDI(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");UserService userService = applicationContext.getBean("userServiceBean", UserService.class);userService.saveUser();}

 运行结果:

构造注入

再准备一个持久层OrderDao:

package spring6.dao;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class OrderDao {private static final Logger logger =  LoggerFactory.getLogger(UserDao.class);public void deleteById(){logger.info("数据库正在删除订单!");}
}

逻辑层:OrderService:

package spring6.service;import spring6.dao.OrderDao;
import spring6.dao.UserDao;public class OrderService {private OrderDao orderDao;private UserDao userDao;//通过反射机制调用构造方法给属性赋值public OrderService(OrderDao orderDao, UserDao userDao) {this.orderDao = orderDao;this.userDao = userDao;}public void delete(){orderDao.deleteById();userDao.insert();}
}

新的xml文件:这里的构造注入方式的配置有两种。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""xmlns:xsi=""xsi:schemaLocation=" .xsd"><bean id="userDaoBean" class="spring6.dao.UserDao"/><bean id="orderDaoBean" class="spring6.dao.OrderDao"/><!--    构造注入①,第一个参数是0,第二个参数是1-->
<!--    <bean id="orderServiceBean" class="spring6.service.OrderService">-->
<!--        <constructor-arg index="0" ref="orderDaoBean"/>-->
<!--        <constructor-arg index="1" ref="userDaoBean"/>-->
<!--    </bean>-->
<!--    构造注入②,使用参数的名字也可以--><bean id="orderServiceBean" class="spring6.service.OrderService"><constructor-arg name="orderDao" ref="orderDaoBean"/><constructor-arg name="userDao" ref="userDaoBean"/></bean>
</beans>

测试代码:

    @Testpublic void testConstructorDI(){ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");OrderService orderServiceBean = applicationContext.getBean("orderServiceBean", OrderService.class);orderServiceBean.delete();}

运行结果:

更多推荐

set注入和构造注入

本文发布于:2023-11-15 20:19:13,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1605715.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:set

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!