美文网首页
Spring依赖注入(DI)

Spring依赖注入(DI)

作者: Insecurity | 来源:发表于2020-12-28 23:40 被阅读0次

    IOC是一种思想,移交对象的控制权,交给spring容器,其目的就是解耦(对象的new)。DI是他的实现方式。简单来讲:就是提供可扩展性更强的代码。比如,切换一些功能的时候,实现插入即可用,而不用再去调整代码。(举例:数据库连接信息)

    构造器注入(需要对应的构造函数)

    通过对应的构造函数注入注入对象(核心标签就是 <constructor-arg/>)
    <bean id="user" class="com.dzq.dto.User" >
            <constructor-arg name="name" value="dzq"/>
    </bean>
    

    set方式注入(需要提供get、set方法)

    <bean id="userDif" class="com.dzq.dto.User">
            <property name="name" value="dzq"/>
            <property name="identity" ref="identity"/>
            <property name="books">
                <array>
                    <value type="java.lang.String">西游记1</value>
                    <value type="java.lang.String">西游记2</value>
                </array>
            </property>
            <property name="hobbies">
                <list>
                    <value>游泳</value>
                    <value>游泳2</value>
                </list>
            </property>
            <property name="games">
                <set>
                    <value>LOL</value>
                    <value>LOL2</value>
                </set>
            </property>
            <property name="info">
                <props >
                    <prop key="sex">男</prop>
                </props>
            </property>
            <property name="relation">
                <map>
                    <entry key="zs" value="朋友1"/>
                    <entry key="ls" value="同学1"/>
                </map>
            </property>
        </bean>
    
    

    扩展方式注入

    1.p命名空间 (PS:需要引入约束,property的缩写)
    2.c命名空间(PS:需要引入约束,constructor-arg的缩写)
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:p="http://www.springframework.org/schema/p"
           xmlns:c="http://www.springframework.org/schema/c"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="userP" class="com.dzq.dto.User" p:name="dzq"/>
        <bean id="userC" class = "com.dzq.dto.User" c:name="dzq"/>  
    

    bean的作用域

    通过bean scope 属性设置,(单例 singleton(默认)、原型 prototype、请求request、会话session、应用 application)
    

    Bean的自动装配

    autowire = "byType"    #通过类型查找
    autowire = "byName"  #通过属性名称,查找,对应bean_id
    

    使用注解实现自动装配

    1.引入context 
    2.开启注解 
      <context:annotation-config/>
    @Autowired 通过反射实现的注入,不依赖set方法,先通过byname,在通过byType去查找对应的属性。
    可以添加子方法上,也能直接添加到属性上
    

    @Resource和@Autowired 的区别

    @Resource @Autowired
    来源 JDK Spring
    优先级 byName => byType byType => byName
    属性 name,type required
    是否支持指定名称 支持 需要借助@Qualifier

    PS:如果为空 需要添加 @Nullable 注解
    如果不满足自动装配,@Autowired 需要使用 @Qualifier 指定 名称
    优先级-不重要-因为当多个对象时,你只能找到唯一的那个。

    使用注解开发

    1.开启注解
     <context:annotation-config/>
    2.开启扫描配置文件
     <context:component-scan base-package="com.dzq"/>
    3.对应的实体类加上注解(相当于注入简单bean,使用@Value注入简单属性值)
    @Component  =>引出webmvc 按照对应层级划分的 @Controller @Service @Repository
    =>使用注解配置对应的属性 如@Scope  配置bean的作用域
    
    4.xml和注解的最佳实现
    综合使用:..暂时没有发现一个好的总结-待续
    

    工厂模式

    该环节涉及到对象的创建 引出设计模式-五大创建模式
    singleton、prototype(clone)、生产工厂、抽象工厂(实现部分)、构造者模式(set方法返回this,实现链式调用)
    

    javaconfig

    以java类的方式,完全取代xml文件。
    相当于在类中构建bean,而不需要在xml中去构造了。(引出springboot  自动配置的关键点)
    

    相关文章

      网友评论

          本文标题:Spring依赖注入(DI)

          本文链接:https://www.haomeiwen.com/subject/oeqxoktx.html