• 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. }

  • 相关阅读:
    攻防世界看雪看雪看雪
    【微信小程序】项目实战—抽签应用
    敏捷开发模型:一种灵活、协作和持续的软件开发方法
    MySQL系统架构设计
    [OpenAirInterface-01]什么是OAI?OAI在github中源代码的存放结构
    javamd5加密解密
    Java面试题一
    Rsync远程同步
    输入网址input,提取标题和正文
    适合零基础学习者的Java学习路线图到底长啥样?一篇文章带你学会Java
  • 原文地址:https://blog.csdn.net/qq_46093575/article/details/127799071