版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Spring day02学习目标(1) 能够掌握 spring 中的常用注解(2) 能够了解 spring 中的新注解(3)能够完成 spring 整合 junit学习指南spring 中 ioc 的常用注解案例使用 xml 方式和注解方式实现单表的 CRUD 操作改造基于注解的 ioc 案例,使用纯注解的方式实现spring 和 Junit 整合1 第一堂课本节知识点01 今日课果程内容介绍02 常用 IOC 注解按照作用分类03 用于创建的 Component 注解04 由 Component 衍生的注解本标知道注解被分为了几类能够知道 Component 注解的作用知道 Componen
2、t 注解衍生出来哪 3 个注解时间:24 分 52 秒1.1 今日课果程内容介绍1.1.1知识概述详情.3总结与补充spring 第二天:spring 基于注解的 IOC 以及 IoC 的案例1、spring 中 ioc 的常用注解2、案例使用xml 方式和注解方式实现单表的 CRUD 操作持久层技术选择:dbutils3、改造基于注解的 ioc 案例,使用纯注解的方式实现spring 的一些新注解使用4、spring 和 Junit 整合1.1.4无1.1.5习题无1.2 常用 IOC 注解按照作用分类知识概述1.2.1详情1.2.2总结与补充1.2.3基于注解的IOC 配置
3、学习基于注解的 IoC 配置,大家脑海里首先得有一个认知,即注解配置和的功能都是一样的,都是要降低程序间的耦合。只是配置的形式不一样。xml 配置要实现关于实际的开发中到底使用 xml 还是注解,每家公司有着不同的使用习惯。所以这两种配置方式我们都需要掌握。我们在讲解注解配置时,采用上一章节的案例,把 spring 的 xml 配置内容改为使用注解逐步实现。新建一个工程 day02_eesy_01anno_ioc 导入 spring-day01 中 day01_eesy_03spring 的代码注解的分类:1.2.4无1.2.5习题无1.3 用于创建的 Component 注解1.3.1知识概
4、述详情.3总结与补充Component:作用:用于把当前类对象存入 spring 容器中属性:value:用于指定 bean 的 id。当我们不写时,它的默认值是当前类名,且首字母改小写。<!-告知 spring 在创建容器时要扫描的包,配置所需要的不是在 beans 的约束中,而是一个名称为 context 名称空间和约束中-><ponent-scan base-package="com.itheima"><ponent-scan>1.3.4怎么让注解生效?习题1.3.5<ponent-scan base-pack
5、age="com.itheima"><ponent-scan>1.4 由 Component 衍生的注解知识概述1.4.1详情1.4.2总结与补充1.4.3Controller:一般用在表现层Service:一般用在业务层Repository:一般用在持久层以上三个注解他们的作用和属性与 Component 是一模一样他们三个是 spring 框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰1.4.4无1.4.5习题无2 第二堂课本节知识点2.1 自动按照类型注入2.2 用于注入数据的注解2.3 改变作用范围以及和生命周期相关的注解本标能够知道
6、哪个注解能按照类型注入能够清楚按照名称注入的注解及注入数据的注解能够清晰知道作用范围的注解时间:28 分 49 秒2.1 自动按照类型注入2.1.1知识概述详情.3总结与补充用于注入数据的他们的作用就和在 xml 配置文件中的 bean Autowired:中写一个<property>的作用是一样的作用:自动按照类型注入。只要容器中有唯一的一个 bean 对象类型和要注入的变量类型匹配,就可以注入成功如果 ioc 容器中没有任何 bean 的类型和要注入的变量类型匹配,则报错。如果 Ioc 容器中有多个类型匹配时:出现位置:可以是变量上,也可以是方法上细节:在使用注
7、解注入时,set 方法就不是必须的了。2.1.4按照类型属性注入用哪个注解?2.1.5习题Autowired2.2 用于注入数据的注解2.2.1知识概述详情.3总结与补充Qualifier:作用:在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用。但是在给方法参数注入时可以(稍后我们讲)属性:value:用于指定注入 bean 的 id。Resource作用:直接按照 bean 的 id 注入。它可以属性:name:用于指定 bean 的 id。使用以上三个注入都只能注入其他 bean 类型的数据,而基本类型和 String 类型无法使用上述注解实现。另外,
8、集合类型的注入只能通过 XML 来实现。Value作用:用于注入基本类型和 String 类型的数据属性:value:用于指定数据的值。它可以使用 spring 中 SpEL(也就是 spring 的 el 表达式)SpEL 的写法:$表达式2.2.4无2.3 改变作用范围以及和生命周期相关的注解2.3.1知识概述详情.3总结与补充用于改变作用范围的他们的作用就和在 bean Scope中使用 scope 属性实现的功能是一样的作用:用于指定 bean 的作用范围属性:value:指定范围的取值。常用取值:singleton prototype和生命周期相关 (了解)他们的作用
9、就和在 bean PreDestroy中使用 init-method 和 destroy-methode 的作用是一样的作用:用于指定销毁方法PostConstruct作用:用于指定初始化方法2.3.4无2.3.5习题无3 第三堂课本节知识点3.1 XMLIOC 的案例-准备案例的必须代码3.2 XMLIOC 案例-编写 spring 的 Ioc 配置3.3 测试基于 XML 的 IOC 案例本标能够编写案例的代码(xml 方式) 时间:32 分 03 秒3.1 XMLIOC 的案例-准备案例的必须代码3.1.1知识概述详情.3总结与补充1, 创建一个新工程 day02_ees
10、y_02account_xmlioc2, 导入坐标 pom.xml 文件<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>org.springframework</group
11、Id><artifactId>spring-test</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>commons-dbutils</groupId><artifactId>commons-dbutils</artifactId><version>1.4</version>3, 创建表和实体类Account4, AccountServic
12、eImpl*/* 账户的实体类*/public class Account implements Serializable private Integer id; private String name; private Float money;create table account(id int primary key auto_increment, name varchar(40),money float)character set utf8 collate utf8_general_ci;insert into account(name,money) values('aaa
13、39;,1000); insert into account(name,money) values('bbb',1000); insert into account(name,money) values('ccc',1000);</dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version><
14、/dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version></version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><
15、;/dependency></dependencies>5, AccountDaoImpl/* 账户的持久层实现类*/public class AccountDaoImpl implements IAccountDao private QueryRunner runner;* 账户的业务层实现类*/public class AccountServiceImpl implements IAccountService private IAccountDao accountDao;public void setAccountDao(IAccountDao accountDao) t
16、his.accountDao = accountDao;Overridepublic List<Account> findAllAccount() return accountDao.findAllAccount();Overridepublic Account findAccountById(Integer accountId) return accountDao.findAccountById(accountId);Overridepublic void saveAccount(Account account) accountDao.saveAccount(account);O
17、verridepublic void updateAccount(Account account) accountDao.updateAccount(account);Overridepublic void deleteAccount(Integer acccountId) accountDao.deleteAccount(acccountId);public void setRunner(QueryRunner runner) this.runner = runner;Overridepublic List<Account> findAllAccount() tryreturnr
18、unner.query("select*fromaccount",new BeanListHandler<Account>(Account.class);catch (Exception e) throw new RuntimeException(e);Overridepublic Account findAccountById(Integer accountId) tryreturn runner.query("select * from account where id = ? ",new BeanHandler<Account&g
19、t;(Account.class),accountId);catch (Exception e) throw new RuntimeException(e);Overridepublic void saveAccount(Account account) tryrunner.update("insertintoaccount(name,money)values(?,?)",account.getName(),account.getMoney();catch (Exception e) throw new RuntimeException(e);Overridepublic
20、void updateAccount(Account account) tryrunner.update("updateaccountsetname=?,money=?where id=?",account.getName(),account.getMoney(),account.getId();catch (Exception e) throw new RuntimeException(e);3.1.4无3.1.5习题无3.2 XMLIOC 案例-编写 spring 的 Ioc 配置3.2.1知识概述Overridepublic void deleteAccount(In
21、teger accountId) tryrunner.update("delete from account where id=?",accountId);catch (Exception e) throw new RuntimeException(e);详情.3总结与补充bean.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns=""xmlns:xsi=""xsi:schemaLocation=&quo
22、t;"><!- 配置 Service -><bean id="accountService" class="com.itheima.service.impl.AccountServiceImpl"><!- 注入 dao -><property name="accountDao" ref="accountDao"></property></bean><!-配置 Dao 对象-><bean id="acc
23、ountDao" class="com.itheima.dao.impl.AccountDaoImpl"><!- 注入 QueryRunner -><property name="runner" ref="runner"></property></bean><!-配置 QueryRunner->3.2.4无3.2.5习题无3.3 测试基于 XML 的 IOC 案例3.3.1知识概述<bean id="runner" class=&qu
24、ot;mons.dbutils.QueryRunner" scope="prototype"><!-注入数据源-><constructor-arg name="ds" ref="dataSource"></constructor-arg></bean><!- 配置数据源 -><bean id="dataSource" class="com.mboPooledDataSource"><!-连接数据库的必备
25、信息-><property name="driverClass" value="com.mysql.jdbc.Driver"></property><property name="jdbcUrl" value="jdbc:mysql:/localhost:3306/eesy"></property><property name="user" value="root"></property><p
26、roperty name="password" value="1234"></property></bean></beans>详情.3总结与补充测试代码:/* 使用 Junit 单元测试:测试我们的配置*/RunWith(SpringJUnit4ClassRunner.class) ContextConfiguration(locations = "classpath:bean.xml") public class AccountServiceTest Autowiredpri
27、vateIAccountService as;Testpublic void testFindAll() /3.执行方法List<Account> accounts = as.findAllAccount(); for(Account account : accounts)System.out.println(account);3.3.4无3.3.5习题无Testpublic void testFindOne() /3.执行方法Account account = as.findAccountById(1); System.out.println(account);Testpubli
28、c void testSave() Account account = new Account(); account.setName("test");account.setMoney(12345f);/3.执行方法as.saveAccount(account);Testpublic void testUpdate() /3.执行方法Account account = as.findAccountById(4); account.setMoney(23456f);as.updateAccount(account);Testpublic void testDelete() /3
29、.执行方法as.deleteAccount(4);4 第四堂课本节知识点4.1 注解 IOC 案例-把自己编写的类使用注解配置4.2 spring 的新注解-Configuration 和 ComponentScan4.3 spring 的新注解-Bean本标能够改造 xml 文件配置方式的项目为注解方式掌握 Configuration 和 ComponentScan 的作用能够掌握 Bean 注解的作用时间:27 分 59 秒4.1 注解 IOC 案例-把自己编写的类使用注解配置4.1.1知识概述详情.3总结与补充1.新建项目 day02_eesy_03account_ann
30、oioc 2.pom.xml<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.2.RELEASE</version></dependency><dependency><groupId>commons-dbutils</groupId><artifactId>co
31、mmons-dbutils</artifactId><version>1.4</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.6</version>3. AccountServiceImpl/* 账户的业务层实现类*/Service("accountService"
32、;)public class AccountServiceImpl implements IAccountServiceAutowiredprivate IAccountDao accountDao;Overridepublic List<Account> findAllAccount() return accountDao.findAllAccount();Overridepublic Account findAccountById(Integer accountId) return accountDao.findAccountById(accountId);Overridepu
33、blic void saveAccount(Account account) accountDao.saveAccount(account);Overridepublic void updateAccount(Account account) accountDao.updateAccount(account);</dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version></vers
34、ion></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.10</version></dependency></dependencies>4. AccountDaoImpl/* 账户的持久层实现类*/Repository("accountDao")public class AccountDaoImpl implements
35、 IAccountDao Autowiredprivate QueryRunner runner;Overridepublic List<Account> findAllAccount() tryreturnrunner.query("select*fromaccount",new BeanListHandler<Account>(Account.class);catch (Exception e) throw new RuntimeException(e);Overridepublic Account findAccountById(Integer
36、 accountId) tryreturnrunner.query("select*fromaccountwhereid=?",new BeanHandler<Account>(Account.class),accountId);catch (Exception e) throw new RuntimeException(e);Overridepublic void saveAccount(Account account) tryrunner.update("insertintoaccount(name,money)values(?,?)",
37、account.getName(),account.getMoney();catch (Exception e) throw new RuntimeException(e);Overridepublic void deleteAccount(Integer acccountId) accountDao.deleteAccount(acccountId);5测试类* 使用 Junit 单元测试:测试我们的配置*/public class AccountServiceTest Testpublic void testFindAll() /1.获取容易ApplicationContext ac =
38、new ClassPathXmlApplicationContext("bean.xml");/2.得到业务层对象IAccountService as = ac.getBean("accountService",IAccountService.class);/3.执行方法List<Account> accounts = as.findAllAccount(); for(Account account : accounts)System.out.println(account);Testpublic void testFindOne() /1.
39、获取容易Overridepublic void updateAccount(Account account) tryrunner.update("updateaccountsetname=?,money=?where id=?",account.getName(),account.getMoney(),account.getId();catch (Exception e) throw new RuntimeException(e);Overridepublic void deleteAccount(Integer accountId) tryrunner.update(&q
40、uot;delete from account where id=?",accountId);catch (Exception e) throw new RuntimeException(e);ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");/2.得到业务层对象IAccountService as = ac.getBean("accountService",IAccountService.class);/3.执行方法Account account =
41、as.findAccountById(1); System.out.println(account);Testpublic void testSave() Account account = new Account(); account.setName("test");account.setMoney(12345f);/1.获取容易ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");/2.得到业务层对象IAccountService as = ac.getBean(
42、"accountService",IAccountService.class);/3.执行方法as.saveAccount(account);Testpublic void testUpdate() /1.获取容易ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");/2.得到业务层对象IAccountService as = ac.getBean("accountService",IAccountService.class);/3.执行方法Acc
43、ount account = as.findAccountById(4); account.setMoney(23456f);as.updateAccount(account);Testpublic void testDelete() /1.获取容易ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");/2.得到业务层对象IAccountService as = ac.getBean("accountService",IAccountService.class);/3
44、.执行方法as.deleteAccount(4);4.1.4无4.1.5习题无4.2 spring 的新注解-Configuration 和 ComponentScan4.2.1知识概述详情.3总结与补充创建:SpringConfiguration.java 该类是一个配置类,它的作用和 bean.xml 是一样的说明两个注解:Configuration作用:指定当前类是一个配置类细节:当配置类作为 AnnotationConfigApplicationContext 对象创建的参数时,该注解可以不写。ComponentScan("com.itheima")
45、作用:用于通过注解指定 spring 在创建容器时要扫描的包属性:value:它和 basePackages 的作用是一样的,都是用于指定创建容器时要扫描的包。我们使用此注解就等同于在 xml 中配置了:<ponent-scan base-package="com.itheima"><ponent-scan>4.2.4无习题4.2.5无4.3 spring 的新注解-Bean知识概述4.3.1详情.3总结与补充public class SpringConfiguration /* 用于创建一个 QueryRunner 对象* para
46、m dataSource* return*/Bean(name="runner")public QueryRunner createQueryRunner(Qualifier("ds2") DataSource dataSource) return new QueryRunner(dataSource);/* 创建数据源对象* return*/Bean(name="ds2")public DataSource createDataSource() try Bean作用:用于把当前方法的返回值作为 bean 对象存入 spring 的
47、ioc 容器中属性:name:用于指定 bean 的 id。当不写时,默认值是当前方法的名称细节:当我们使用注解配置方法时,如果方法有参数,spring 框架会去容器中查找有没有可用的 bean 对象。查找的方式和 Autowired 注解的作用是一样的4.3.4无4.3.5习题无5 第五堂课本节知识点5.1 AnnotationConfigApplicationContext 的使用5.2 spring 的新注解-Import5.3 spring 的新注解-PropertySource本标会使用 AnnotationConfigApplicationContext 进能够使用 import
48、注解spring 的新注解-PropertySource试ComboPooledDataSource ds = new ComboPooledDataSource(); ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql:/localhost:3306/eesy"); ds.setUser("root");ds.setPassword("1234"); return ds;catch (Exception e)throw new
49、RuntimeException(e);时间:28 分 09 秒5.1 AnnotationConfigApplicationContext 的使用5.1.1知识概述详情.3总结与补充修改现有的测试类,删除之前的 bean.xml 文件使用一下代码进试ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfiguration.class);在创建创建一个 QueryRunner 对象的方法上加上Scope("prototype"),让其为多例5.1.4无5.1.5习题无
50、5.2 spring 的新注解-Import5.2.1知识概述详情.3总结与补充把所有的数据连接配置相关的东西从 SpringConfiguration 类中挪到了 createDataSource 类中作用:用于导入其他的配置类属性:value:用于指定其他配置类的字节码。当我们使用 Import 的注解之后,有 Import 注解的类就父配置类,而导入的都是子配置类修改后的 SpringConfiguration新增的/* 和 spring 连接数据库相关的配置类*/ComponentScan("com.itheima") Import(JdbcConf
51、ig.class)PropertySource("classpath:jdbcCperties") public class SpringConfiguration 5.2.4无5.2.5习题无public class JdbcConfig /* 用于创建一个 QueryRunner 对象* param dataSource* return*/Bean(name="runner") Scope("prototype")public QueryRunner createQueryRunner(Qualifier(&qu
52、ot;ds2") DataSource dataSource) return new QueryRunner(dataSource);/* 创建数据源对象* return*/Bean(name="ds2")public DataSource createDataSource() try ComboPooledDataSource ds = new ComboPooledDataSource(); ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql:/
53、localhost:3306/eesy"); ds.setUser("root");ds.setPassword("1234"); return ds;catch (Exception e)throw new RuntimeException(e);5.3 spring 的新注解-PropertySource5.3.1知识概述详情.3总结与补充创建 jdbcCperties 文件PropertySource作用:用于指定 properties 文件的位置属性:value:指定文件的名称和路径。关键字:class
54、path,表示类路径下.mysql.jdbc.Driver jdbc.url=jdbc:mysql:/localhost:3306/eesy jdbc.username=rootjdbc.password=1234修改思考:注解与 xml 方式的选择?哪种选择更方便就使用哪种方式来配置* 和 spring 连接数据库相关的配置类*/public class JdbcConfig Value("$jdbc.driver") private String driver;Value("$jdbc.url") private String url;Value(&
55、quot;$jdbc.username") private String username;Value("$jdbc.password") private String password;/* 创建数据源对象* return*/Bean(name="ds2")public DataSource createDataSource() try ComboPooledDataSource ds = new ComboPooledDataSource(); ds.setDriverClass(driver);ds.setJdbcUrl(url); ds.setUser(username);ds.setPassword(password); return ds;catch (Exception e)throw new RuntimeException(e);5.3.4无5.3.5习题无6 第六堂课本节知识点6.1 Qualifier 注解的另一种用法6.2 spring 整合 Junit本标时间:6.1 Qualifier 注解的另一种用法6.1.1知识概述详情.3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机械涡轮增压课程设计
- 机械智能家居课程设计
- 机械工艺套筒课程设计
- 机械工程控制课程设计
- 机械原理窗户课程设计
- 机械原理有关课程设计
- 机械原理四工位课程设计
- 机械制造摇杆课程设计
- 机械制造工艺学课程设计
- 2024秋三年级语文上册 第七单元 第23课 父亲、树林和鸟说课稿 新人教版
- 食品安全与日常饮食智慧树知到期末考试答案章节答案2024年中国农业大学
- 不负卿春-大学生职业生涯规划2059024-知到答案、智慧树答案
- MOOC 中医体质学-新乡医学院 中国大学慕课答案
- 2024婚内财产全部归女方所有的协议书
- 空气源热泵供暖系统运维管理规范编辑说明
- 【课件】丹纳赫DBS-问题解决培训
- 浙江省宁波市小升初数学真题重组卷
- 全员消防安全责任制
- 消防工程消防器材供应方案
- 《国家心力衰竭指南2023》解读
- 火电厂信息化建设规划方案
评论
0/150
提交评论