IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> ssm框架复习巩固 -> 正文阅读

[Java知识库]ssm框架复习巩固

ssm框架复习的第五天:spring的DI(依赖注入)?

1.依赖注入的概念

依赖注入:Dependency Injection。它是 spring 框架核心 ioc 的具体实现。

我们的程序在编写时,通过控制反转,把对象的创建交给了 spring,但是代码中不可能出现没有依赖的情况。

ioc 解耦只是降低他们的依赖关系,但不会消除。例如:我们的业务层仍会调用持久层的方法。

那这种业务层和持久层的依赖关系,在使用 spring 之后,就让 spring 来维护了。

简单的说,就是坐等框架把持久层对象传入业务层,而不用我们自己去获取。

DI(依赖注入):管理类与类之间的依赖关系

2.依赖注入的实现方式

2.1 构造方法注入

通过构造方法给成员属性(变量)赋值

注意:构造方法注入:类中一定要有指定参数的构造方法

name属性中的值一定要是构造函数里面的参数

实现代码如下:

//构造函数UserDao dao
public UserServiceImpl(UserDao dao) {
    this.dao = dao;
}
<bean id="userService" class="com.swlz.service.impl.UserServiceImpl">
        <constructor-arg name="dao" ref="userDao"></constructor-arg>
    </bean>

2.2 set方法注入

set方法注入在类中一定要有指定的set方法

注意:name属性中的值应该写类属性的名字,而属性的名字由set和get方法决定

代码如下:

private UserDao dao;
 public void setDao(UserDao dao) {
        this.dao = dao;
    }
 <bean id="userService1" class="com.swlz.service.impl.UserServiceImpl">
        <property name="dao" ref="userDao"></property>
    </bean>

2.3 注解注入

  @Autowired
    private IUserDao userDao;

注意:默认根据(对象)类型进行注入

第一步:根据要注入类型(UserDao)到Spring容器中查找对象,如果根据类型只找到了一个对象,那么直接蒋政对象赋值给属性,如果没有任何这个类型(对象的类型)的对象,就会报错

第二步:如果要注入的类型在Spring容器中找到了多个,根据变量名称去匹配,如果有和变量名称一致致的,直接将这个对象赋值给属性

第三步:如果找到了多个类型的对象,并且没有名称匹配,直接报错

3.p名称空间注入和c名称空间注入

xmlns:p="http://www.springframework.org/schema/p"

xmlns:p="http://www.springframework.org/schema/c"

?4.DI的注解开发

代码如下:

package com.swlz.config;
import org.springframework.context.annotation.*;
@Configuration
//包扫描
@ComponentScan("com.swlz")
//导入配置类
@Import(DataSourceConfig.class)
//jdbc.properties配置文件
@PropertySource("jdbc.properties")
public class ApplicationConfig {

}
package com.swlz.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.JdbcTemplate;

import javax.sql.DataSource;
import java.beans.PropertyVetoException;
@Configuration
public class DataSourceConfig {

    @Value("${jdbc.driver}")
    private String driverClass;
    @Value("${jdbc.url}")
    private String jdbcUrl;
    @Value("${jdbc.username}")
    private String user;
    @Value("${jdbc.password}")
    private String password;

//创建对象 把这个对象加载到spring的IOC容器中去 交给容器管理  bean相当于配置文件中的bean标签,注解是用来替代配置文件的,简化开发,提高开发效率
   //<bean id="userDao" class="com.swlz.dao.impl.UserDaoImpl"></bean>
    @Bean("dataSource")
    @Scope("singleton")
    public DataSource getDataSource(){
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        try {
            dataSource.setDriverClass(driverClass);
            dataSource.setJdbcUrl(jdbcUrl);
            dataSource.setUser(user);
            dataSource.setPassword(password);
        } catch (PropertyVetoException e) {
            e.printStackTrace();
        }
        return dataSource;
    }

    @Bean("template")
    public JdbcTemplate getJdbcTemplate(DataSource dataSource){
        JdbcTemplate template = new JdbcTemplate(dataSource);
        return template;
    }
}
package com.swlz.dao.impl;
import com.swlz.dao.IUserDao;
import com.swlz.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import java.util.List;

@Repository("userDao")
public class UserDaoImpl implements IUserDao {
    /**
     *  能够完成依赖注入    根据名字取查找指定id的对象注入给这个属性
     *
     *  他是和jdk版本相关的 jdk1.8或者之前都可以使用,但是1.8之后不能使用
     */

    @Autowired
    private JdbcTemplate template;
    /**
     * 从数据库查询所有用户
     * @return
     */
    public List<User> findAll() {

        System.out.println("userDao.... findAll");

        String sql  = "select * from user";
        return template.query(sql,new BeanPropertyRowMapper<User>(User.class));
    }
    /**
     * 保存用户到数据库
     * @param user
     */
    public void saveUser(User user) {
        String sql = "insert into user values(null,?,?,?,?)";
        template.update(sql,user.getName(),user.getAge(),user.getSex(),user.getAddress());
    }
}
package com.swlz.service.impl;

import com.swlz.dao.IUserDao;
import com.swlz.domain.User;
import com.swlz.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service("userService")
public class UserServiceImpl implements UserService {
    @Autowired
    private IUserDao userDao;
    public List<User> findAll() {

       return userDao.findAll();
    }

    public void saveUser(User user) {
        userDao.saveUser(user);
    }
}
#JDBC配置文件 jdbc.properties
jdbc.url=jdbc:mysql://localhost:3306/db5
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=root

今日学习感受:学习的时候总是有些浮躁,这是很不好的,不能静下心来踏实的去学习,这是很不对的。希望自己能及早改正,让自己能够沉下心来,潜心学习,这才是正确之举。当然也要劳逸结合。学习也要把一日三餐吃好,吃饱了吃好了才有的好的精神状态去继续学习。最后一句话:书山有路勤,为径学海无涯苦作舟。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:00:25  更:2021-12-26 22:03:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:25:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码