栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring笔记(二)依赖注入

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring笔记(二)依赖注入

在写代码的时候,项目中的Service层调用Dao层的时候,肯定会有依赖的情况,如果正常的在各自层写相应的代码,再在.xml文件中配置注入各自的对象,这样做代码的耦合性可能会很高:如下面所示

//Dao层的代码
package com.fxy.Dao.Impl;

import com.fxy.Dao.UserDao;

public class UserDaoImpl implements UserDao {

    @Override
    public void userSave() {
        System.out.println("userSave add......");
    }
}
//Service层代码
package com.fxy.Service.Impl;

import com.fxy.Dao.UserDao;
import com.fxy.Service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class UserServiceImpl implements UserService {
    @Override
    public void serviceSave() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = context.getBean("userDao", UserDao.class);
        userDao.userSave();

    }
}
//Xml文件配置



    
    

    


由于目前没有学到SpringMvc 所以,用测试文件当作最后的调用:

package com.fxy.test;

import com.fxy.Service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class test1 {
    @Test
    public void test(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserService userService = context.getBean("userService", UserService.class);
        userService.serviceSave();

    }
}

从上述的代码,可以看出每个调用的类从容器中各自拿去相应的对象实例:

(此图转自黑马程序员的课程图片) 

此时的话,两个层的依赖关系会比较高,因为在项目中获取service层的操作时,不管Dao层的内部是如何获取的,我们只关心Service层业务逻辑,所以此时可以通过在spring容器内部的方式,把Dao注入到Service中即可,也就是说把创建对象的方法交给Spring就OK。

那么此时就有几种方法来解决上述的问题:

1.set方法

此时service层代码需要改变如下:

package com.fxy.Service.Impl;

import com.fxy.Dao.UserDao;
import com.fxy.Service.UserService;


public class UserServiceImpl implements UserService {
    private UserDao userDao;

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

    @Override
    public void serviceSave() {
        userDao.userSave();
    }
}

.xml文件同样也要配置:




    
    
        
    


2.构造器构造

同样service层要改变:

package com.fxy.Service.Impl;

import com.fxy.Dao.UserDao;
import com.fxy.Service.UserService;


public class UserServiceImpl implements UserService {
    private UserDao userDao;

    public UserServiceImpl(UserDao userDao) {
        this.userDao = userDao;
    }

    public UserServiceImpl() {
    }

    @Override
    public void serviceSave() {
        userDao.userSave();
    }
}

.xml文件




    
    
        
    
    
3.依赖注入的数据类型    1)普通数据的注入:
//xml文件

        
    
package com.fxy.Service.Impl;

import com.fxy.Service.UserService;

public class UserServiceImpl implements UserService {
    private String name;

    public void setName(String name) {
        this.name = name;
    }
    

    @Override
    public void serviceSave() {
        System.out.println(name);
    }
}
2)集合以map为例(map中带有对象引用)

user对象在entity包中创建

import com.fxy.entity.User;

import java.util.Map;

public class UserDaoImpl implements UserDao {

    private Map map;

    public void setMap(Map map) {
        this.map = map;
    }

    @Override
    public void userSave() {
       System.out.println(map);
    }
}



    
    

    
        
            
                
                
            
        
    

最后,由于实际的项目中,不可能只在一个XML文件中配置,所以我们需要用XML文件配置:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/489957.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号