spring框架:对象类型属性及复杂类型属性的注入

一、对象属性类型的注入:

以MVC三层架构为例(Service、Controller、Dao),通常service和controller层需要对dao层的数据进行访问操作,这里以将dao层数据注入到Service层作为例子来说明

1、创建一个dao层的接口类

package com.xawl.spring.dao;

public interface UserDao {
    void method1();
}

2、实现该接口的方法

package com.xawl.spring.dao;

public class UserDaoImp implements UserDao {
    @Override
    public void method1() {
        System.out.println("this is UserDao");
    }
}

3、创建Service层下的调用类

package com.xawl.spring.service;

import com.xawl.spring.dao.UserDao;

public class UserService {
    private UserDao userDao;

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public void userservice() {
        System.out.println("this is userservice");
        this.userDao.method1();
    }

    @Override
    public String toString() {
        return "UserService{" +
                "userDao=" + userDao +
                '}';
    }
}

4、配置spring.xml(ref表示到跳转id)

<?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:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:task="http://www.springframework.org/schema/task"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
						http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/aop
						http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
    <!--ioc的演示-->
    <bean id="springioc" class="com.xawl.spring.ioc.Springioc"></bean>
    <!--属性注入的演示-->
    <bean id="demo1" class="com.xawl.spring.di.Demo1">
        <constructor-arg name="demoData" value="Demo1"></constructor-arg>
    </bean>
    <!--set方法注入-->
    <bean id="demo2" class="com.xawl.spring.di.Demo2">
        <property name="demoDemo2" value="Demo2"></property>
    </bean>
    <!--对象属性注入-->
    <bean id="userDaoImp" class="com.xawl.spring.dao.UserDaoImp"></bean>
    <bean id="userService" class="com.xawl.spring.service.UserService">
        <property name="userDao" ref="userDaoImp"></property>
    </bean>
</beans>

5、创建测试类

package springdi;

import com.xawl.spring.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestService {
    public static void main(String[] args) {
        //获取资源文件
        String resources = "spring.xml";
        //根据资源文件创建对象
        ApplicationContext context = new ClassPathXmlApplicationContext(resources);
        UserService userService = (UserService)context.getBean("userService");
        System.out.println(userService);
        userService.getUserDao();
        userService.userservice();
    }
}

6、输出结果

UserService{userDao=com.xawl.spring.dao.UserDaoImp@2f686d1f}
this is userservice
this is UserDao

二、复杂类型属性注入

数组、set、map、list四种类型的属性注入

1、创建bean实类

package com.xawl.spring.di;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Demo3 {
    private String[] arrs;
    private List<String> list;
    private Map<String,String> map;
    private Set<String> set;

    public String[] getArrs() {
        return arrs;
    }

    public void setArrs(String[] arrs) {
        this.arrs = arrs;
    }

    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public Map<String, String> getMap() {
        return map;
    }

    public void setMap(Map<String, String> map) {
        this.map = map;
    }

    public Set<String> getSet() {
        return set;
    }

    public void setSet(Set<String> set) {
        this.set = set;
    }

    @Override
    public String toString() {
        return "Demo3{" +
                "arrs=" + Arrays.toString(arrs) +
                ", list=" + list +
                ", map=" + map +
                ", set=" + set +
                '}';
    }
}

2、配置spring.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"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:task="http://www.springframework.org/schema/task"

       xsi:schemaLocation="http://www.springframework.org/schema/beans
						http://www.springframework.org/schema/beans/spring-beans.xsd
						http://www.springframework.org/schema/aop
						http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
    <!--ioc的演示-->
    <bean id="springioc" class="com.xawl.spring.ioc.Springioc"></bean>
    <!--属性注入的演示-->
    <bean id="demo1" class="com.xawl.spring.di.Demo1">
        <constructor-arg name="demoData" value="Demo1"></constructor-arg>
    </bean>
    <!--set方法注入-->
    <bean id="demo2" class="com.xawl.spring.di.Demo2">
        <property name="demoDemo2" value="Demo2"></property>
    </bean>
    <!--对象属性注入-->
    <bean id="userDaoImp" class="com.xawl.spring.dao.UserDaoImp"></bean>
    <bean id="userService" class="com.xawl.spring.service.UserService">
        <property name="userDao" ref="userDaoImp"></property>
    </bean>
    <!--复杂类型属性注入-->
    <bean id="demo3" class="com.xawl.spring.di.Demo3">
        <!--注入数组-->
        <property name="arrs">
            <list>
                <value>1</value>
                <value>2</value>
                <value>3</value>
            </list>
        </property>
        <!--注入list集合-->
        <property name="list">
            <list>
                <value>11</value>
                <value>22</value>
                <value>33</value>
            </list>
        </property>
        <!--注入set集合-->
        <property name="set">
            <set>
                <value>111</value>
                <value>222</value>
                <value>333</value>
            </set>
        </property>
        <!--注入map集合-->
        <property name="map">
            <map>
                <entry key="1" value="01"></entry>
                <entry key="2" value="02"></entry>
                <entry key="3" value="03"></entry>
            </map>
        </property>
    </bean>
</beans>

3、创建测试类

package springdi;

import com.xawl.spring.di.Demo3;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestDemo3 {
    public static void main(String[] args) {
        //获取数据源
        String resources = "spring.xml";
        //创建对象
      ApplicationContext context = new ClassPathXmlApplicationContext(resources);
        Demo3 demo3 = (Demo3) context.getBean("demo3");
        System.out.println(demo3);
    }
}

4、输出结果

Demo3{arrs=[1, 2, 3], list=[11, 22, 33], map={1=01, 2=02, 3=03}, set=[111, 222, 333]}

三、IOC和DI的关系和区别

IOC是容器,把对象交给spring处理

DI依赖注入,通过spring向类的属性设置值

依赖注入(DI)不能单独存在,需要在控制反转(IOC)的基础之上完成操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值