学习spring第一天遇到的问题

注意:
1.spring并没有代替mybatis,mybatis是Dao层的框架,spring是贯穿三层的,可以和mybatis等整合。
2.单独使用spring最主要的目的不是为了简化代码,最主要是为了解耦
3.下面方法使用的注入方式为set注入,注入方式只有两种,另外一种是构造方法注入,但是一般不用
4.配置jdbc的时候,四个值,其中username值,会和“用户名”这个系统量冲突,所以可以使用user等不同于username的值
也可以使用jdbc.username将它和用户名区分开

5。引入的sping相关的jar包,最好同一个版本
6.入门案例里边是用service层调用dao层来示范,有一个问题,遇到很多次,下图中圈起来的部分到底是使用全类名还是使用类名将首字母小写。
在这个spring配置文件中已经给这个包起别名了,所以不能用全类名来写。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

过程:

spring:贯穿三层的框架(半成品的软件) 可以单独每层,每层都使用spring会提升效率
为什么要使用spring:
1.解耦,传统的没有使用框架的项目,servlet层调用service层是直接new出来一个serviceImpl类,和service类的耦合性强。不符合设计原则(高内聚低耦合)。spring项目可以将service等(被调用的)资源整合起来放在spring容器中,由spring管理,需要new的时候,从容器里取,这样,servlet和service类的耦合性就会降低。
2.spring成为了一个规范,可以高效编程

spring的关键实现
1.AOP(面向切片编程)

2.IOC (控制反转)
不使用框架时,可能会使用servlet类中new一个service接口的实现类,通过这个实现类再来调用dao接口的mybatis映射来执行真正对数据库的操作。
使用xml配置:

在pom.xml中导入使用到的坐标,使用spring框架,在service中声明一个dao接口,然后给这个dao接口配set方法,之后再resources下创建applicationConfig.xml文件,这个文件是spring的配置文件。在这个文件里,用《bean》标签来注入对象,在《bean》里边注入需要注入的资源。例如:
在这里插入图片描述
注意点:。

2.在applicatioConfig.xml文件中,主要有

1.标签:注入对象

id属性

是唯一标识注入,当然这个属性是为了调用的时候,如果只是注入,不需要调用,则不需要这个id属性。

class属性:

让spring容器来管理的类的类型。这个必须要写 创建对象所在全路径

scope属性

:这个有5个值,

  1. singleton:创建单例对象,这个对象只有一个(默认就是这个值)
  2. prototype:创建的对象每一个都是不一样的。
  3. request:在请求域,,针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
  4. session:针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
  5. global session:global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。
    总结:scope默认是singleton,一般开发大多数情况下保持默认就好了。有时候会修改为prototype。另外三个一般接触不到

name属性:

功能和id一样 ,id不能包含特殊符号,name可以(基本不用,为了满足struts1遗留问题)

* init-method属性(了解)

:在创建资源对象后,自动调用的方法。初始化的操作

* destory-method属性(了解)

:在容器对象销毁的时候,自动调用的方法。

3,入门案例

3.1 导包

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.1.9.RELEASE</version>
</dependency>

3.2 定义资源(service)

3.3 配置

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <!-- 1.创建spring控制的资源-->
    <bean id="userService" class="com.itheima.service.impl.UserServiceImpl"/>
</beans>

3.4 定义应用程序

public class UserApp {
    public static void main(String[] args) {
        //2.加载配置文件,创建spring的容器对象
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        //3.获取资源
        UserService userService = (UserService) ctx.getBean("userService");
        userService.save();
    }
}
`

## 依赖注入 DI 

如何理解DI:和iOC描述的是同一个事情,DI是从应用程序角度,A依赖B,把B注入到spring容器。
 IOC:是从spring的角度,从被动调用的角度,转换成为主导控制new的角度。
### 5.1 set注入

在bean标签内部使用property标签:

* name属性 : 属性的名称
* value属性: 普通类型的数据
* ref属性 : 对象类型的数据

<img src="assets/image-20210419143206985.png" alt="image-20210419143206985" style="zoom:80%;" />

### 5.2 构造方法注入(了解)

在bean标签内部使用contrustor-arg标签:

* name属性 : 构造方法形参的名称
* value属性 :普通类型的数据
* ref属性  : 对象类型的数据


### 5.3 list集合数据注入

```xml
<bean id="" class="">
	<propery name="">
		<list>
			<value>数据</value>
			<value>数据</value>
			<value>数据</value>
		</list>
	</property>
</bean>

5.4 properties集合数据注入

<bean id="" class="">
	<propery name="">
		<props>
			<prop key=""></prop>
			<prop key=""></prop>
			<prop key=""></prop>
		</props>
	</property>
</bean>	

6,读取外部的properties配置文件

  • 编写properties配置文件

    username=root
    pwd=123321
    
  • 在spring配置文件中读取properties配置文件

     <!--2.加载配置文件-->
    <context:property-placeholder location="classpath:*.properties"/>
    

    注意:spring定义的用于描述配置文件的位置。classpath表示配置文件在类路径下

  • 使用properties数据

    ${key}
    

7,多xml配置文件

7.1 在创建容器对象时加载所有的配置文件(了解)

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext*.xml");

7.2 在主配置文件中引入其他的配置文件

<import resource="配置文件名称">

8,ApplicationContext体系结构

BeanFactory(接口)
	|--ApplicationContext(接口) : 引入了容器的思想
		|--ClassPathXmlApplicationContext  : 读取类路径下的配置文件,并创建容器对象 
		|--FileSystemXmlApplicationContext : 读取文件系统下的配置文件,并创建容器对象 
		|--AnnotationConfigApplicationContext  : 读取注解类,并创建容器对象 

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dUnVssGJ-1618918548314)(assets/image-20210419164119104.png)]

遇到的问题
1、Error : java 不支持发行版本5

解决:
https://blog.csdn.net/qq_22076345/article/details/82392236

2、运行后,控制台一直停止不下来
druid出错记录:com.alibaba.druid.support.logging.JakartaCommonsLoggingImpl error

这是百度到的解决方案:
https://blog.csdn.net/qq_43488978/article/details/108855112

但是使用后发现不管用,如下图,我是使用jdbc.properties文件中写入连接数据库的信息,然后用下图的语句导入文件,是通配符。注意:就是这个,具体原因不详,可能是java和druid的版本导致的,不能用这个通配符,将修改为jdbc就可以解决。
在这里插入图片描述
在这里插入图片描述

3.运行后报错:Loading class `com.mysql.jdbc.Driver’. This is deprecated警告处理,jdbc更新处………………‘com.mysql.cj.jdbc.Driver’……这样的报错信息,循环出现
解决:将pom.xml中mysql-connect-java的版本修改为5版本,
出现的原因:jdbc 5版本使用的驱动是;com.mysql.jdbc.Driver,但是8版本使用的是不同的,所以会有问题

4、运行后报错:
查看:控制台打印的错误说明是什么,如果看不懂,百度,如果没有解决,继续下边的步骤
检查1:所有jar包的版本是否有较大的问题
检查2:所有的组件是否都有,都正确引入、注入
检查3:sql语句复制到数据库可视化工具里,看是否能正确运行
检查4:是否某个单词拼写错误
检查5:和标准资料对比,发现不同

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值