• Java --- Spring6对IoC的实现


    目录

    一、控制反转

    二、依赖注入

    三、set注入

     四、构造注入


    一、控制反转

    1、控制反转是一种思想

    2、控制反转是为了降低程序耦合度,提高程序扩展力,达到OCP原则,达到DIP原则。

    3、控制反转主要有:①、将对象的创建权力交出去,交给第三方容器负责。②、将对象和对象之间的关系的维护权力交出去,交给第三方容器负责。

    4、控制反转是思想,依赖注入是实现。

    二、依赖注入

    1、依赖注入实现了控制反转的思想

    2、Spring通过依赖注入的方式来完成Bean管理。

    3、Bean管理:Bean对象的创建,以及Bean对象中属性的赋值。

    4、依赖注入:①、依赖指的是对象和对象之间的关联关系。②、注入指的是一种数据传递行为,通过注入行为让对象和对象产生关系。

    5、依赖注入常见实现方式:①、set注入,②、构造注入

    三、set注入

    set注入,基于set方法实现的,底层通过反射机制调用属性对应的set方法然后给属性赋值,这种方式要求属性必须对外提拱set方法。

    1. public class UserDao {
    2. private static final Logger logger = LoggerFactory.getLogger(UserDao.class);
    3. public void insert(){
    4. logger.info("数据库正在报存用户数据");
    5. }
    6. }
    1. public class UserService {
    2. private UserDao userDao;
    3. //这里选择使用系统自动生成的set方法,符合java规范,也可以自定义,但
    4. //方法名必须要set开头
    5. public void setUserDao(UserDao userDao) {
    6. this.userDao = userDao;
    7. }
    8. public void saveUser(){
    9. userDao.insert();
    10. }
    11. }

    spring的配置文件 

    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    5. <bean id="userDaoBean" class="com.cjc.spring6.dao.UserDao"/>
    6. <bean id="userServiceBean" class="com.cjc.spring6.service.UserService">
    7. <property name="userDao" ref="userDaoBean"/>
    8. bean>
    9. beans>

    测试类:

    1. public class UserTest {
    2. @Test
    3. public void getUser(){
    4. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring6.xml");
    5. UserService userServiceBean = applicationContext.getBean("userServiceBean", UserService.class);
    6. userServiceBean.saveUser();
    7. }
    8. }

    打印结果:

     四、构造注入

    通过构造方法给属性赋值

    1. public class UserStructureService {
    2. private UserDao userDao;
    3. public UserStructureService(UserDao userDao) {
    4. this.userDao = userDao;
    5. }
    6. public void save(){
    7. userDao.insert();
    8. }
    9. }
    1. "1.0" encoding="UTF-8"?>
    2. <beans xmlns="http://www.springframework.org/schema/beans"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    5. <bean id="userDao" class="com.cjc.spring6.dao.UserDao"/>
    6. <bean id="userStrService1" class="com.cjc.spring6.service.UserStructureService">
    7. <constructor-arg index="0" ref="userDao"/>
    8. bean>
    9. <bean id="userStrService2" class="com.cjc.spring6.service.UserStructureService">
    10. <constructor-arg name="userDao" ref="userDao"/>
    11. bean>
    12. <bean id="userStrService3" class="com.cjc.spring6.service.UserStructureService">
    13. <constructor-arg ref="userDao"/>
    14. bean>
    15. beans>

    测试类:

    1. @Test
    2. public void getUserStr(){
    3. ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring1.xml");
    4. UserStructureService userStrService = applicationContext.getBean("userStrService3", UserStructureService.class);
    5. userStrService.save();
    6. }

  • 相关阅读:
    622.设计循环队列(LeetCode)
    Qt5开发从入门到精通——第九篇四节( Qt5 文件及磁盘处理—— 文件系统浏览)
    合并区间问题
    来聊一聊MySQL InnoDB的LSN
    从20s优化到500ms,我用了这三招
    daml和xaml
    [车联网安全自学篇] 五十三. Android安全之APK备份文件敏感信息挖掘
    ssm整合shiro
    Linux压缩与解压缩
    速度精度双SOTA! TPAMI2022最新车道线检测算法(Ultra-Fast-Lane-Detection-V2)
  • 原文地址:https://blog.csdn.net/qq_46093575/article/details/127799071