🛫更多ssm知识见SSM_面向CRUD编程专栏
🚕本博客总结自黑马程序员的ssm框架视频
🚒博主对于该知识尚在学习阶段
🚄如果发现存在问题请毫不吝啬的指出
🚀🚀扎哇太枣糕的博客主页🚀🚀
目录
1 Spring相关API
2 Spring配置数据源
3 Spring注解开发
4 Spring整合Junit
1 Spring相关API
创建Spring客户端对象
创建Spring客户端对象主要是依靠多态的方式使用ApplicationContext接口的以下三个实现类:
ClassPathXmlApplicationContext类
这个类的参数使用的是相对路径,xml文件需要在项目下的resource文件夹下进行配置
FileSystemXmlApplicationContext类
这个类的参数使用的是绝对路径,xml文件可以在任何地方进行配置,但是缺点是一旦配置文件修改位置或者是将项目在其他电脑上运行的话基本上就是报错无法正常运行。
AnnotationConfigApplicationContext类
使用注解配置容器对象的使用此类创建Spring容器读取注解,先行了解,后续的学习再使用。在博客的最后一小块进行了介绍使用。
获取Bean对象
getBean(String id)
通过唯一id标识去创建bean对象,好处是id标识唯一确定一个bean类,不会创建错
getBean(Class<T> type)
通过bean类创建bean对象,坏处就是配置文件里的bean类不止一个,如果此时配置文件里bean类的标签不唯一就会抛NoUniqueBeanDefinitionExceptionBean定义不唯一异常
2 Spring配置数据源
数据源又被称为是连接池其出现的目的是为了提高程序的性能,数据源可以事先实例化源数据并初始化部分连接资源,使用连接资源的时候可以从数据源中获取,使用完毕之后再将连接资源还给数据源。常见的数据源有DBCP、C3P0、BoneCP、Druid等。
Druid数据源的创建方式有很多种:手动创建、使用配置文件解耦合、使用spring框架依赖注入并解耦合,他们的学习是层层递进的,要从手动开始最后引入spring框架这样便于加深理解。
手动创建Druid数据源
第一步:通过pom文件依赖坐标的方式导入两个数据源需要使用的jar包 第二步:创建数据源对象并设置基本连接信息,最后归还资源
将数据源对象的基本连接信息设置抽取出来到配置文件,实现解耦合
第一步:通过pom文件依赖坐标的方式导入两个数据源需要使用的jar包 (跟上一个相同)
第二步:配置配置文件,配置文件的后缀是properties,也就是使用键值对的形式存储配置信息
第三步:创建数据源对象并设置基本连接信息,最后归还资源
🔥使用Spring依赖注入的方式创建Druid数据源,并实现解耦合最终进化版本,以后的使用模板
第一步:导入spring-contest依赖和以上两种依赖
第二步:配置配置文件,存储数据源配置信息
第三步:创建applicationContext.xml配置文件并配置bean标签
第四步:创建数据源对象操作连接最后归还资源
3 Spring注解开发
Spring的原始注解
通过案例了解注解开发
注解开发的优势就在于进一步使用反射封装代码,简化xml配置文件的内容,使用注解就可以代替xml配置文件的bean标签配置。
在使用注解开发之前,xml文件里要使用UserDaoImpl类的bean标签创建对象,使用UserServiceImpl类的bean标签创建对象的同时将上一个bean标签创建的对象通过set方法依赖注入到这个bean标签里。
依赖注入的有关注解
@Component:通用版的@Repository注解,无论哪一层都能用,缺点就是辨识度不高,无法通过注解理清楚这是哪一层的业务
@Repository:Dao层的@Component注解用于实例化Bean,加上字符串参数相当于一个<bean>标签设置了唯一id标识。这个注解的作用相当于图中上面一行的<bean>标签。
@Controller:controller层的@Component注解用于实例化Bean
@Service: Service层的@Component注解用于实例化Bean,用法和意义同上一个
@Autowired: 用于依赖注入,加入注解后就说明下面的变量定义用到了依赖注入
@Qualifier:用于指定注入对象相当于ref属性
当然这种依赖注入还可以进一步简写。就是只保留@Autowired注解舍去@Qualifier注解,再将set方法的定义舍去。之所以这么做也能成功的原因是:xml配置文件里面只有一个这种类型的bean标签,此时只会唯一将该bean对象注入进去,不会出现像使用getBean方法时参数传class对象但是bean不唯一抛异常的问题。只使用一个@Autowired注解的话,需要保证只有一个同类型的bean被注入到spring容器中。不管是用哪种方式,使用几个注解,set方法的定义都可以省略不写,注解底层已经通过反射机制为我们创建好了。
@Resource:如果出现了xml配置文件里面不只有一个这种类型的bean标签的情况时,相当于下面这种情况一个类创建了两个标签,这个时候就用到了这个注解
除了使用注解之外,还要在xml文件使用标签扫描注解,让spring容器知道都使用了哪些注解并实现对应的功能
数据注入的注解
@Value:将基本数据类型和string字符串注给下面的变量
除了直接注入数据的形式,还能引用spring容器中的数据进行注入
其他注解
@Scope:与bean标签的scope属性意思相同
@PostConstruct:指明下面的方法是初始化方法
@PreDestory:指明下面的方法是销毁方法
新注解
注解开发的最终目的就是用注解取代xml配置文件的同时还不会降低代码的解耦合能力,使用上面的注解进行开发时还是无法替代全部的xml文件,依然有以下四种标签无法被注解所取代,需要使用新注解进行开发取代xml文件
- 非自定义的bean(就像前面Druid数据源配置的bean标签,第三方jar包给的bean无法取代)
- 加载properties文件的标签<context:property-placeholder>
- 组件扫描<context:component-scan>
- 引入其他配置文件的<import>
@Configuration:标示这是Spring容器的核心配置类,相当于xml配置文件
@ComponentScan:扫描包下注解,相当于<context:component-scan>
@Import:导包,相当于<import>
@property: 加载properties文件,相当于<context:property-placeholder>
@Bean:在注解里将返回值是对象的方法实例化Bean,也就是说将方法返回的对象注入到Spring容器中供调用,也相当于一个<bean>标签,只不过是用在方法上的。
由于xml文件此时已经被注解锁完全取代了,所以创建客户端对象的时候就不能再使用ClassPathApplicationContext类,要使用第三种方式AnnotationConfigApplicationContext类
4 Spring整合Junit
第一步:导入两个依赖坐标
第二步:加注解
@RunWith:替换原来的运行期
@ContextConfiguration:指定配置文件(xml配置)或者配置类(注解配置)
在使用spring整合Junit的时候遇到一个问题记录一下: spring-context和spring-test的依赖版本不同导致控制台抛出以下异常java.lang.NoClassDefFoundError: org/springframework/core/annotation/MergedAnnotations。解决方法:将两个以来坐标的版本改成一致即可。具体操作参考这篇博客:已解决:java.lang.NoClassDefFoundError: org/springframework/core/annotation/MergedAnnotations_ray2580的博客-CSDN博客
上一篇:【SSM面向CRUD编程专栏 1】Spring简介 xml配置文件 依赖注入 数据注入
下一篇:【SSM面向CRUD编程专栏 3】关于黑马程序员最全SSM框架教程视频,P37集老师跳过的模块创建以及tomcat下载安装配置和运行等诸多问题