Spring IOC和dl注入

39 篇文章 0 订阅
9 篇文章 0 订阅

IOC控制反转&DL依赖注入
控制反转(Inversion of Control,缩写为IOC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。 其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。
我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言提供的反射机制,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。
DL依赖注入: 比如Service层需要Dao对象,调用Dao层方法完成业务逻辑,但是如果直接使用new Dao层对象会导致代码耦合度过高,我们可以通过spring框架配置好注入对象,在类中提供成员属性和set方法让框架完成DL依赖注入.

基本配置文件&约束
log4j.properties
applicationContext.xml
引入约束:
spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\xsd-configuration.html



如果一个类需要交给spring框架IOC管理需要在配置文件中配置标签

调用工厂类测试

@Test
// Spring的方式:
public void demo2(){
    // 创建Spring的工厂类:
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    // 通过工厂解析XML获取Bean的实例.
    UserDao user = (User) applicationContext.getBean("user");
}

spring配置
id :Bean起个名字. 在约束中采用ID的约束:唯一. 必须以字母开始,可以使用字母、数字、连字符、下划线、句话、冒号 id:不能出现特殊字符.

name:Bean起个名字. 没有采用ID的约束. name:出现特殊字符.如果没有id的话 , name可以当做id使用.
整合struts1的时候:

scope属性:Bean的作用范围.

  • singleton :默认值,单例的.
  • prototype :多例的.
  • request :WEB项目中,Spring创建一个Bean的对象,将对象存入到request域中.
  • session :WEB项目中,Spring创建一个Bean的对象,将对象存入到session域中.
    globalSession :WEB项目中,应用在Porlet环境.如果没有Porlet环境那么globalSession相当于session.

Bean的生命周期的配置:
通过配置标签上的init-method作为Bean的初始化的时候执行的方法,配置destroy-method作为Bean的销毁的时候执行的方法。
销毁方法想要执行,需要是单例创建的Bean而且在工厂关闭的时候,Bean才会被销毁.

DL配置注入

Spring的Bean的属性注入
构造方法的方式注入属性,提供对应构造方法和属性`

 <!-- 第一种:构造方法的方式 -->
<bean id="user" class="con.hua.action.User">
    <constructor-arg name="name" value="保时捷"/>
    <constructor-arg name="price" value="1000000"/>
</bean>`

set方法的方式注入属性,提供set方法和属性

  <!-- 第二种:set方法的方式 -->
    <bean id="car2" class="con.hua.action.User">
        <property name="name" value="奇瑞QQ"/>
        <property name="price" value="40000"/>
    </bean>

Spring的属性注入:对象类型的注入:

<!-- 注入对象类型的属性 -->
<bean id="person" class="con.hua.action.User">
    <property name="name" value="会希"/>
    <!-- ref属性:引用另一个bean的id或name -->
    <property name="car2" ref="car2"/>
</bean>

Spring的属性注入:注入集合

 <!-- Spring的复杂类型的注入===================== -->
    <bean id="collectionBean" class="cn.itcast.spring.demo5.CollectionBean">
        <!-- 数组类型的属性 -->
        <property name="arrs">
            <list>
                <value>会希</value>
                <value>冠希</value>
                <value>天一</value>
            </list>
        </property>
        
        <!-- 注入List集合的数据 -->
        <property name="list">
            <list>
                <value>fs</value>
                <value>htht</value>
                <value>hthtrh</value>
            </list>
        </property>
        
        <!-- 注入Map集合 -->
        <property name="map">
            <map>
                <entry key="aaa" value="111"/>
                <entry key="bbb" value="222"/>
                <entry key="ccc" value="333"/>
            </map>
        </property>
        
        <!-- Properties的注入 -->
        <property name="properties">
            <props>
                <prop key="username">root</prop>
                <prop key="password">123</prop>
            </props>
        </property>
    </bean>

spring factory工厂注入

  <bean id="factory" class="com.hua.Action.Userfactorybean">
    </bean>
    <bean id="clazz" class="com.hua.Action.clazz">
        <property name="user" ref="factory"></property>
        <property name="map">
            <map>
                <entry>
                    <key>
                        <value>zhang</value>
                    </key>
                    <value>
                        san
                    </value>
                </entry>
            </map>

        </property>

    </bean>

注解式IOS和dl

<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context"
           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-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        ">
    
    <context:component-scan base-package="com.hua.Action"></context:component-scan>

</beans>
@Component("clazz")
public class clazz {
    @Autowired
    @Qualifier("user")
    private  User user;
    @Autowired
    @Qualifier("arr")
    private  int[] arr;
    @Autowired
    @Qualifier("list")
    private List<String> list;
    @Autowired
    @Qualifier("map")
    private Map<String,String> map;

package com.hua.Action;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.LinkedList;

@Configuration
public class config {
    @Bean("arr")
    public int[] intArr(){
        return new int[] {1, 2, 3, 4, 5};
    };
    @Bean("list")
    public LinkedList getlist(){
        LinkedList<String> list = new LinkedList<String>();
        list.add("张三");
        list.add("李四");
        return list;
    }
    @Bean("map")
    public HashMap<String, String > getmap(){
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("132","esf");
        return map;
    }
}

Spring的分配置文件的开发
一种:创建工厂的时候加载多个配置文件:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml","applicationContext2.xml");

二种:在一个配置文件中包含另一个配置文件:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值