spring IOC依赖注入

***手工装配(XML方式)***

一、通过setter方法注入:
<!-- 通过setter注入 -->
<bean id="userDao1" class="cn.itcast.h_di_simple.UserDaoImpl">
    <property name="jdbcUrl" value="jdbc:mysql:///test"></property>
    <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    <property name="username" value="root"></property>
    <property name="password" value="root"></property>
</bean>

二、通过构造器注入:
<!-- 通过构造方法注入,会自动按顺序与参数匹配 -->
<bean id="userDao2" class="cn.itcast.h_di_simple.UserDaoImpl">
    <constructor-arg value="jdbc:mysql:///test22"></constructor-arg>
    <constructor-arg value="com.mysql.jdbc.Driver22"></constructor-arg>
    <constructor-arg value="root_name22"></constructor-arg>
    <constructor-arg value="root_password22"></constructor-arg>
</bean>

或是:
<!-- 通过构造方法注入,会与指定的索引匹配,第1个索引为0 -->
<bean id="userDao3" class="cn.itcast.h_di_simple.UserDaoImpl">
    <constructor-arg index="0" value="jdbc:mysql:///test22"></constructor-arg>
    <constructor-arg index="1" value="com.mysql.jdbc.Driver22"></constructor-arg>
    <constructor-arg index="2" value="root_name22"></constructor-arg>
    <constructor-arg index="3" value="root_password22"></constructor-arg>
</bean>

**注入普通属性(基本类型或是String型)**
<bean id="user" class="cn.itcast.j_di_simple.User">
    <property name="name" value="张三"></property>
    <property name="age" value="18"></property>
    <property name="gender" value="true"></property>
</bean>

**注入null值**
<!-- 注入null值 -->
<property name="comment">
    <null />
</property>

**注入依赖的对象**
方式一:
<!-- 定义一个bean -->
<bean id="userDao" class="cn.itcast.j_di_bean.UserDaoImpl"/>

<!-- 使用ref属性指定要注入的bean(id或是name属性) -->
<bean id="userService" class="cn.itcast.j_di_bean.UserServiceImpl">
    <property name="userDao" ref="userDao"></property>
</bean>

方式二:使用内部bean,因为没有id或name,所以该bean不能被其他bean使用

<!-- 在property中直接定义一个bean,不需要指定id或name,指定了也无效 -->
<bean id="userService2" class="cn.itcast.j_di_bean.UserServiceImpl">
    <property name="userDao">
        <bean id="userDao2" class="cn.itcast.j_di_bean.UserDaoImpl" />
    </property>
</bean>

**注入集合属性**
一、创建类:
public class User {
    private String name;

    // 集合属性要定义为接口类型
    // 集合类型可以不初始化,因为会注入一个新的集合对象
    // 集合最好指定强类型,以便Spring转型,如果未指定,就会是String型的值
    // 如果没有指定强类型,也可以在配置时指定:
//      <value type="java.lang.Integer">10</value>
    private Set<String> addressSet = new HashSet<String>();
    private Set<Integer> numberSet;
    private List<String> addressList;
    private String[] addressArray;
    private Map<String, String> addressCodeMap;
    private Properties userProperties;  

    public void printInfo() {
        System.out.println("name = " + name);
        System.out.println("addressSet = " + addressSet);
        System.out.println("numberSet = " + numberSet);
        System.out.println("addressList = " + addressList);
        System.out.println("addressArray = " + Arrays.toString(addressArray));
        System.out.println("addressCodeMap = " + addressCodeMap);
        System.out.println("userProperties = " + userProperties);
    }

    // getter与setter略
}

二、配置:
<bean id="user" class="cn.itcast.k_di_collection.User">
    <property name="name" value="张三"></property>

    <!-- Set类型 -->
    <property name="addressSet">
        <set>
            <value>上地东路27号</value>
            <value>上地东路28号</value>
        </set>
    </property>

    <!-- Set类型 -->
    <property name="numberSet">
        <set>
            <value type="java.lang.Integer">1</value>
            <value type="java.lang.Integer">2</value>
        </set>
    </property>

    <!-- List类型,数组类型与List配置完全一样(具体代码略) -->
    <property name="addressList" >
        <list>
            <value >上地东路27号</value>
            <value>上地东路28号</value>
        </list>
    </property>

    <!-- Map类型,要指定key-value对 -->
    <property name="addressCodeMap">
        <map>
            <entry key="上地东路27号" value="100085" ></entry>
            <entry key="软件园9号楼" value="100086"></entry>
        </map>
    </property>

    <!-- Properties类型,只能是String型的值 -->
    <property name="userProperties">
        <props>
            <prop key="firstName" >hello</prop>
            <prop key="lastName">world</prop>
        </props>
    </property>
</bean>
***手工装配(注解方式)***

**在类中使用——定义bean**
1、引入context命名空间。
2、在配置文件中添加context:component-scan标签。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">

<!-- 设置为自动扫描与装配bean,扫描指定包及其所有下级包中的类,可以写多个,之间用英文的逗号隔开 -->    
<context:component-scan base-package="cn.com"></context:component-scan>

</beans>

@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)、
@Repository用于标注数据访问组件,即DAO组件。
而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Scope用于指定当前bean的作用域。

**在类中使用——注入**

这需要通过@Resource注解实现,@Resource注解可以标注在字段或属性的setter方法上,但它默认按名称装配。名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。

@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。如果没有指定name属性,并且按照默认的名称找不到依赖对象时, @Resource注解会回退到按类型装配。但一旦指定了name属性,就只能按名称装配了。


@Resource(name="personDao")
private PersonDao personDao;;//用于字段上
@Resource(name="personDao")
public void setPersonDao(PersonDao personDao) {//用于属性的set方法上
       this.personDao = personDao;
}
后一种相当于xml配置文件中的
<property name=“personDao" ref="personDao" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值