Spring_DI&IOC

1.Spring简介:        Spring 是一个分层的,轻量级框架,其核心是 IOC(控制反转) 和 AOP(面向切面)

2.Spring 环境搭建:

        导包:                                

                        

         创建 applicationContext.xml 配置文件:

<?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-2.5.xsd">
    
    <!-- 
        bean: 将一个类的对象创建的过程交给spring容器
            id: 唯一标识
            class: 指定类的具体路径(类全名)
     -->
    <bean id="user" class="cn.java.entity.User"></bean>
</beans>

        启动框架:

public class TestSpring {
    public static void main(String[] args) {
        // 启动Spring框架
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    }
}

3.Spring 之 DI:        依赖注入

        对象的属性赋值:

                通过构造方法赋值:

<?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-2.5.xsd">
           
    <bean id="user" class="cn.java.lhy.entity.User">
        <!-- User类中的属性按顺序分别为username,password,且有构造方法User(String username,String password) -->
    	<constructor-arg index="0" type="java.lang.String" value="admin"></constructor-arg>
    	<constructor-arg index="1" type="java.lang.String" value="root"></constructor-arg>
    </bean>
</beans>

                通过 get/set 方法赋值:

<?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-2.5.xsd">
           
    <bean id="user" class="cn.java.lhy.entity.User">
        <!-- 如果不是指向对象,直接用value设置值即可 -->
        <!-- 设置对象用ref,普通属性用value -->
    	<property name="username" value="admin"></property>
    	<property name="password" value="root"></property>
    </bean>
</beans>

        对List、Set、Map以及properties属性赋值:

<?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-2.5.xsd">

    <bean id="person" class="cn.java.entity.Person">
        <!-- 普通属性赋值 -->
        <property name="name" value="admin"></property>
    
        <!-- list属性赋值 -->
        <property name="list">
            <list>
                <value>中国</value>
                <value>one</value>
                <!-- 
                    可以通过 ref 标签,将其他对象添加到list集合中,bean书写对象名
                    <ref bean="student" />
                -->
            </list>
        </property>

        <!-- set属性赋值(与list相似) -->
        <property name="set">
            <!-- set不可重复,重复不添加,所以只有第一个 one 值 -->
            <set>
                <value>one</value>
                <value>one</value>
            </set>
        </property>

        <!-- map属性赋值(存放键值对) -->
        <property name="map">
            <!-- map中 key 不可重复,重复key不添加,value覆盖 -->
            <map>
                <entry key="name" value="张三"></entry>
                <entry key="age" value="18"></entry>
            </map>
        </property>

        <!-- properties属性赋值 -->
        <property name="props">
            <props>
                <prop key="driver">com.mysql.jdbc.Driver</prop>
            </props>
        </property>
    </bean>

</beans>

4.Spring 之 IOC:       

        控制反转,即将对象的创建、销毁、初始化等一系列的生命周期的过程交给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-2.5.xsd">
    
    <!-- 
        bean: 将一个类的对象创建的过程交给spring容器
            id: 唯一标识
            class: 指定类的具体路径(类全名)
     -->
    <bean id="user" class="cn.java.entity.User"></bean>
</beans>
public class Window {
    public static void main(String[] args) {
        // 启动Spring框架 等价于    ==>    User user = new User();
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 获取spring容器中创建的对象(通过id值获取)
        User user = (User)context.getBean("user"); 
    }
}

        scope:        控制对象在spring容器中的创建方式

<!-- 
    scope: 
        常用值:    
            singleton(单例): 创建时只存在一个实例,默认值
            prototype(多例): 输出prototype的bean对象时,每次都会重新生产一个新的对象给请求方
-->
<bean id="user" class="cn.java.entity.User" scope="singleton"></bean>

        生命周期:        init-method、destory-method

<!-- userService类中有init、destroy方法 -->
<!--
    init-method: 用于设置初始化的方法
    destroy-method: 用于设置销毁资源的方法
-->
<bean name="userService" class="cn.java.service.UserService" init-method="init" destroy-method="destroy"></bean>

        迟加载:        lazy-init

<!--  
    lazy-init: 是否以懒加载的方式创建对象
        true/default: 以懒加载的方式创建对象,即用到对象时才创建对象
        false: 非懒加载,spring容器启动立刻就创建对象
-->
<bean id="user" class="cn.java.entity.User" lazy-init="false"></bean>

        自动装配:        autowire

                进行对象注入的时候有

                        set 方法注入:        <property name="userDao" ref="userDao" />

                        构造方法注入:        <constructor-arg><ref bean="userDao" /></constructor-arg>

                现通过autowire进行注入:

<!--
    注入的对象,必须有无参构造

    autowire:
        byName: 根据 setter 方法名进行匹配,如果找不到,就不赋值
        byType: 根据 setter 方法的参数列表中的数据类型进行匹配
-->

<!--
    已知UserService类中有setUserDao方法
    如 使用byName,对于 setUserDao 方法,就会找 bean 中 id 值为userDao,如果此时id值为UserDao,则set方法找不到相匹配的(区分大小写)
-->
<bean id="userDao" class="cn.java.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="cn.java.service.UserService" autowire="byName"></bean>

<!--
    如 Service类中有 setUserDao(UserDao userDao) 方法,就会找UserDao(如果xml中出现多个相同类型的对象,会报错),如果参数类型时接口,就会找对应的实现类对象
-->
<bean id="userDao" class="cn.java.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="cn.java.service.UserService" autowire="byType"></bean>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring框架中,IOC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是两个重要的概念。 IOC是一种设计原则,它反转了传统的程序设计中对象的创建和依赖关系的管理方式。传统方式中,对象的创建和依赖关系是由程序代码直接控制的,而在IOC中,对象的创建和依赖关系的管理交给了容器来完成。应用程序通过描述对象之间的依赖关系,由容器负责创建对象、维护对象的生命周期,并将所需的对象注入到需要它们的地方。 DI是IOC的一种具体实现方式。它通过将对象之间的依赖关系定义在配置文件中或通过注解来描述,容器会根据这些配置信息自动创建对象,并将依赖关系注入到对象中。通过DI,我们可以将对象之间的耦合度降低,提高代码的可测试性、可维护性和可扩展性。 在Spring框架中,我们可以使用XML配置文件、Java配置类或注解来描述对象之间的依赖关系。Spring容器会根据这些配置信息实例化对象,并将依赖关系自动注入到对象中。这样,我们就可以通过IOC容器来管理对象的创建和依赖关系,而不需要在代码中直接进行对象的创建和依赖关系的维护。 总结来说,IOC和DI是Spring框架中的核心概念,通过将对象的创建和依赖关系的管理交给容器来完成,可以降低代码的耦合度,提高代码的可测试性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值