Spring学习的第二天
第二天总共学习了以下内容:
- spring中的ioc常用注解;
- 案例使用xml方式和注解方式实现单表的CRUD操作(但还是需要xml配置文件,并不是纯注解的配置);
- 改造基于注解的Ioc案例,使用纯注解的方式实现,spring的一些新注解的使用;
- spring和junit的整合;
一、ioc常用注解:
1.1关于创建对象的,就如同xml中的<bean>标签,@Component(用在其他类),@Controller(一般用在表现层的类),@Service(一般用在业务层的类),@Repository(一般用在持久层的类)
1.2关于注入数据的,@AutoWired(自动按类型注入,可以作用在变量上和方法上,可以没有setter方法);
@Qualifier(在按照类型注入的基础上再按照名称注入。它给类成员注入时不能单独使用,需要依赖于@AutoWired,但是在给方法注入时可以,即在形参前面使用,@Qualifier(“xx”));
@Resource(直接按照bean的id进行注入,可以独立使用)
以上三个注解只能注入bean类型的数据,而基本类型的数据和String类型无法使用上述注解实现。另外,集合类型的注入只能通过xml来实现。
@Value(用于注入基本类型和String类型的数据,属性:value,用于指定数据的值。它可以使用spring中的SpEl(spring中的el表达式),写法:${ 表达式})
1.3用于改变作用范围,@Scope(用于指定bean的作用范围,属性:value,指定范围,取值有:singleton(默认),prototype)
1.4关于生命周期的:@PostConstruct(用于指定初始化的方法),@PreDestory(用于指定销毁方法)
在使用注解配置时,只需要在bean.xml文件中告知spring在创建容器时需要扫描的包,用<context:component-scan>标签中的base-package属性即可。
二、关于DBUtils
DBUtils是dao层的一个小框架,封装了JDBC,可以将结果集映射到JavaBean。DBUtils中不传DataSource创建对象是保证多条语句共用同一事务,(在一个业务里面有多次跟数据库交互的过程)。
- JDBC:原生访问数据库的方式,访问数据库麻烦;
- DBUtils:对JDBC简单封装,能自动封装查询结果集,需要在代码中写SQL;
- Mybatis:进一步封装jdbc,Sql语句写在配置文件中,面向对象操作,有一、二级缓存;
- Hibernate:对jdbc封装的最彻底,纯面向对象,可以不写SQL;
三、Spring的新注解
首先创建一个config包,创建一个名为SpringConfiguration的类,其中包名和类名可以随便起。
@Configuration,指定当前类为一个主配置类;
@ComponentScan,用于通过注解指定Spring在创建容器时要扫描的包,属性:value,它和base-packages的作用是一样的,如同配置了<context:component-scan>。
@Bean,用于把当前方法的返回值作为bean对象存入spring的Ioc容器中,属性:name,用于指定bean的id,默认值为当前方法的名称。
细节:当我们使用该注解配置方法时,如果方法有参数,spring框架会去容器中查找有没有可用的bean对象。查找的方式和AutoWired注解的作用是一样的。
此时在获取spring的核心容器对象时,不再使用classPathXmlApplication(“xxx.xml”)了,而是使用AnnotationConfigApplicationContext(配置类.class),因为此时已经不使用bean.xml文件进行配置了。
@Import,用于导入其他的配置类到主配置类,属性:value,用于指定其他配置类的字节码。当我们使用@Import注解之后,有@Import注解的类就是父配置类,而导入的都是子配置类。
@PropertySource,用于指定properties文件的位置,属性:value,用于指定文件的名称和路径。关键字:classpath,表示类路径下,若有包则写包路径,如@PropertySource(“classpath:jdbcConfig.properties”)。
四、Spring整合Junit的配置
1.导入spring整合junit的jar包;(spring-test)
2.使用Junit提供的一个注解把原有的main方法替换成spring提供的@Runwith注解,写在测试类的类上;(@Runwith(springJunit4classRunner.class))
3.告知spring的容器,spring的ioc创建是基于xml还是基于注解配置的,并说明位置;( @ContextConfiguration,属性:①locations:指定xml文件的位置,加上classPath的关键字,表示在类路径下;②classes:制定注解类所在的位置,注解 的配置文件);
4.对bean对象自动注入;(@AutoWired)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:bean.xml")
public class AccountServiceTest { @Autowired
@Qualifier(value = "accountService")
private IAccountService accountService; @Test
public void transferTest(){
String sourceName = "aaa";
String targetName = "ccc";
Float money = 500.23f;
accountService.transfer(sourceName,targetName,money);
}
}
当使用spring5.x版本时,要求junit的jar至少在4.12及以上的版本;
Spring学习的第二天的更多相关文章
- Spring学习指南-第二章-Spring框架基础(完)
第二章 Spring框架基础 面向接口编程的设计方法 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用.例如,FixedDepositController 类包含 ...
- spring学习笔记(一) Spring概述
博主Spring学习笔记整理大部分内容来自Spring实战(第四版)这本书. 强烈建议新手购入或者需要电子书的留言. 在学习Spring之前,我们要了解这么几个问题:什么是Spring?Spring ...
- Spring学习笔记2——表单数据验证、文件上传
在上一章节Spring学习笔记1——IOC: 尽量使用注解以及java代码中,已经搭建了项目的整体框架,介绍了IOC以及mybatis.第二节主要介绍SpringMVC中的表单数据验证以及文件上传. ...
- 不错的Spring学习笔记(转)
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
- Spring 学习记录8 初识XmlWebApplicationContext(2)
主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...
- spring 学习(四): spring 的 jdbcTemplate 操作
spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...
- spring 学习(三):aop 学习
spring 学习(三):aop 学习 aop 概念 1 aop:面向切面(方面)编程,扩展功能不修改源代码实现 2 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码 3 aop底层使用动态代 ...
- 2018.12.22 Spring学习02
Spring学习02 1.使用注解配置Spring 1.1 为主配置文件引入新的命名空间(约束) 添加约束文件xxx-xxx-context.xml 添加到主配置文件中 选择刚才的context.xm ...
- Spring学习笔记之aop动态代理(3)
Spring学习笔记之aop动态代理(3) 1.0 静态代理模式的缺点: 1.在该系统中有多少的dao就的写多少的proxy,麻烦 2.如果目标接口有方法的改动,则proxy也需要改动. Person ...
随机推荐
- flink基本原理
一.简介 开源流式处理系统在不断地发展,从一开始只关注低延迟指标到现在兼顾延迟.吞吐与结果准确性,在发展过程中解决了很多问题,编程API的易用性也在不断地提高.本文介绍一下 Flink 中的核心概念, ...
- Codeforces-501b
Misha hacked the Codeforces site. Then he decided to let all the users change their handles. A user ...
- Swap Digits
Description ) in the first line, which has the same meaning as above. And the number is in the next ...
- PlantUML Viewer Chrome 插件 画时序图
PlantUML通过简单直观的语言来定义示意图 使用 Chrome+ PlantUML Viewer的插件画图 1,打开chrome网上应用店 2,搜索plantuml viewer 并添加 3,扩展 ...
- 这些C++常用内置函数你会几个??
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Regina520 新手注意:如果你C++学的不好,可以去拿我的C+ ...
- 可扩展的Java线程池执行器
分享一下最近优锐课学习笔记. Java线程池执行程序偏向于排队而不是产生新线程.从好的方面来说,我们有两种解决方法. 理想情况下,对任何线程池执行程序而言,期望如下: 预先创建了一组初始线程(核心线程 ...
- 输出错误long类型
Microsoft Visual C++ 输出不了long 类型的数字怎么办? 在C/C++中,64为整型一直是一种没有确定规范的数据类型.现今主流的编译器中,对64为整型的支持也是标准不一,形态各异 ...
- AQS系列(三)- ReentrantReadWriteLock读写锁的加锁
前言 前两篇我们讲述了ReentrantLock的加锁释放锁过程,相对而言比较简单,本篇进入深水区,看看ReentrantReadWriteLock-读写锁的加锁过程是如何实现的,继续拜读老Lea凌厉 ...
- Jenkins + Docker + dockerfile-maven-plugin + Harbor CI/CD spring-boot项目的最轻量级配置
说明 本文只为方便日后查阅,记录一些关键性的步骤和踩坑的情况. dockerfile-maven-plugin构建镜像配置 <plugin> <groupId>com.spot ...
- jdk13-新特性预览
一新特性 350: Dynamic CDS Archives(动态CDS档案) 351: ZGC: Uncommit Unused Memory(ZGC:取消提交未使用的内存) 353: Reimpl ...