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方法。

public class UserDao {
    private static final Logger logger = LoggerFactory.getLogger(UserDao.class);

    public void insert(){
        logger.info("数据库正在报存用户数据");
    }
}
public class UserService {
    private UserDao userDao;
    //这里选择使用系统自动生成的set方法,符合java规范,也可以自定义,但
    //方法名必须要set开头
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void saveUser(){
        userDao.insert();
    }
}

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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="userDaoBean" class="com.cjc.spring6.dao.UserDao"/>
    <bean id="userServiceBean" class="com.cjc.spring6.service.UserService">
        <!--spring要调用对应的set方法,需要配置property标签-->
        <!--name:set方法名,去掉set-->
        <!--ref:指定要注入的bean的id-->
        <property name="userDao" ref="userDaoBean"/>
    </bean>
</beans>

测试类:

public class UserTest {
    @Test
    public void getUser(){
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring6.xml");
        UserService userServiceBean = applicationContext.getBean("userServiceBean", UserService.class);
        userServiceBean.saveUser();
    }
}

打印结果:

 四、构造注入

通过构造方法给属性赋值

public class UserStructureService {
    private UserDao userDao;

    public UserStructureService(UserDao userDao) {
        this.userDao = userDao;
    }

    public void save(){
        userDao.insert();
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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">
    <bean id="userDao" class="com.cjc.spring6.dao.UserDao"/>
    <!--根据索引下标配置-->
    <bean id="userStrService1" class="com.cjc.spring6.service.UserStructureService">
       <!--constructor-arg:构造方法注入
           index:指定参数下标,按构造方法中的参数依次往后
           ref:指定注入bean的id-->
        <constructor-arg index="0" ref="userDao"/>
    </bean>
   <!--根据参数名配置-->
    <bean id="userStrService2" class="com.cjc.spring6.service.UserStructureService">
        <!--constructor-arg:构造方法注入
            name:指定参数名
            ref:指定注入bean的id-->
        <constructor-arg name="userDao" ref="userDao"/>
    </bean>
    <!--spring自行判断配置-->
    <bean id="userStrService3" class="com.cjc.spring6.service.UserStructureService">
        <!--不指定下标,也不指定参数名,由spring自己判断-->
        <constructor-arg  ref="userDao"/>
    </bean>
</beans>

测试类:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鸭鸭老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值