| |
|
开发:
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 今日学习感受:学习的时候总是有些浮躁,这是很不好的,不能静下心来踏实的去学习,这是很不对的。希望自己能及早改正,让自己能够沉下心来,潜心学习,这才是正确之举。当然也要劳逸结合。学习也要把一日三餐吃好,吃饱了吃好了才有的好的精神状态去继续学习。最后一句话:书山有路勤,为径学海无涯苦作舟。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |