Spring
学习(一)
前言: 根据Spring学习笔记整理。第一部分
文章目录
- Spring
- 1. Spring 含义
- 2.Spring的优势
- 3.Spring模块
- 4. schema & dtd
- Spring入门步骤(案例)
- 1. 导入jar包
- 2. 配置文件
- Spring 相关概念【重要】
- BeanFactory
- 案例
- 小结:
- 常见异常
- Spring xml 的配置bean
- 1. id、name
- 2. import
以下是本篇文章正文内容,仅供参考
1. Spring 含义
要点【轻量级、容器、集成】
spring是开源的轻量级企业开发应用框架
降低企业开发难度
spring提供一站式解决方案,每一层都有自己的解决方案
2.Spring的优势
- 开源轻量级
- 提供AOP功能
- 提供IOC\AOP\DI容器
- 提供集成测试环境
- 方便集成其他框架
3.Spring模块
重点掌握以下几个部分:
- 集成测试环境模块
- 核心模块(Beans\Core)
- AOP模块(aop\aspectj)
- 数据访问和集成
- web模块
4. schema & dtd
- schema
- 中文含义:提要,提纲,就是模板的意思。
- 作用:约束XML该如何编写,约束配置文件中的标签书写规范
- dtd
- 和schema一样,用于约束XML如何编写,但是已经很少使用了。
- 在Eclipse中关联schema
关联schema之后,输入尖括号,即可显示提示。
WIndows -> Preferences
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-49yccdPM-1600429714788)(assets/1585706290375.png)]
XML Catalog -> Add
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YHNLi5Nh-1600429714790)(assets/1585706371628.png)]
File System.. -> 找到本地schema本地路径,引入即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SPW1QudV-1600429714792)(assets/1585706484759.png)]
Spring入门步骤(案例)
搭建Spring环境步骤(使用框架的通用步骤)
- 导入spring的jar
- 编写配置文件
- 使用
1. 导入jar包
(暂时导入三个,需要再导入其它的。按照console调试查看,缺少什么导什么)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1Dd0RBsP-1600429714795)(assets/1585706570264.png)]
2. 配置文件
注意:配置文件要和src分开。因此,在工程根目录下,创建新的文件夹存放。引用的时候通过指定classpath即可。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IkpYGSly-1600429714796)(assets/1585706585096.png)]
xml文件配置参考 :在这个里面可以拿到xml头。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1u5bWVXm-1600429714799)(assets/1585706676994.png)]
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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 告诉容器需要管理的对象 -->
<bean name="userService" class="com.neu.service.UserServiceImpl"></bean>
</beans>
public class _01HelloWorld {
//spring步骤
//导入jar (beans\core)
//编写配置文件
//使用
public static void main(String[] args) {
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
}
}
Spring 相关概念【重要】
- 容器(存放对象,提供注册(放入容器)、获取(得到对象)的操作。)
相当于生活中存放东西的器皿,在程序的角度就是用来存放对象(bean)的容器。涉及到对象的装配、取出以及管理等操作
ps:存放的时候,使用配置文件(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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 告诉容器需要管理的对象 -->
<bean name="userService" class="com.neu.service.UserServiceImpl"></bean>
</beans>
- IOC 控制反转
是一种思想,就是将原来在程序手动创建的对象,交给spring容器来处理,使用的时候直接从容器中获取即可。
- 正向控制:需要什么对象自行来创建
- 反向控制:需要的对象不用手动创建,直接从容器中获取,不用关心对象创建的过程。统一把对象的创建权限交给容器来处理。
案例: 使用 正向控制 和 IOC 两种方式创建 userService 对象
正向控制:
public static void main(String[] args) throws Exception{
// 正向控制
UserService userService = new UserService();
System.out.println(userService);
}
反转控制(IOC):
public static void main(String[] args) throws Exception{
//IOC
//将对象的创建权利交给容器来处理。
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
//根据名字获取
UserService userService = (UserService) beanFactory.getBean("two");
System.out.println(userService);
}
- DI
在对象创建过程中,将依赖的属性(简单值、对象、集合)通过配置方式告诉容器来给自己设置。(一句话:对象需要什么属性,容器会自动赋值)【后续一整块内容的,现在暂时简单了解一下即可。】 - AOP
AOP[Aspect-Oriented programming] 是指 面向切面编程(直接翻译),主要概念有:切点、切面(前置通知、后置通知、环绕通知),先看看概念。最后在来看。是Spring中很重要的一部分。应用场景统一日志处理(logging–log4j2)、统一事务处理(transaction\tx-jar包表示)、性能监控(performance monitoring)、权限(privileges)等等【后续一整块内容的,现在暂时简单了解一下即可。】
BeanFactory
- BeanFactory的作用(含义)
spring容器的最基本接口,用来配置、创建、管理对象的容器。 - BeanFactory管理bean的原理
- 通过Resource具体类读取XML配置文件
- 解析配置文件(XML)内容
- 解析
<bean>
标签 - 通过反射创建对象(无参构造器)后放入容器 [必须要提供一个无参构造器]
- 对外提供
getBean()
的方法获取容器
案例
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 告诉容器需要管理的对象 -->
<!-- name属性值不能重复 -->
<!-- id和name作用一样,但是name可以通过,号赋值多个 -->
<bean name="userService,one,two" class="com.neu.service.UserServiceImpl"></bean>
<!--<bean name="otherUserService" class="com.neu.service.UserServiceImpl"></bean>-->
</beans>
package com.neu.service;
public interface UserService {
}
package com.neu.service;
public class UserServiceImpl implements UserService {
}
public class _02BeanFactory {
public static void main(String[] args) throws Exception{
//IOC
//将对象的创建权利交给容器来处理。
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
//根据名字获取
UserService userService = (UserService) beanFactory.getBean("two");
System.out.println(userService);
//根据类型获取
//注意点:通过类型查找,如果找到多个会报错
//UserService userService = beanFactory.getBean(UserService.class);
//System.out.println(userService);
//根据名字和类型获取(建议)
//UserService otherUserService= beanFactory.getBean("otherUserService",UserService.class);
//System.out.println(otherUserService);
}
}
小结:
XML配置的规则
<!-- 使用bean标签 告诉容器需要管理的对象 -->
<!-- name属性值不能重复,同个name不能给多个bean使用,但是一个name中能有多个值 -->
<!-- id和name作用一样,但是name可以通过,号赋值多个 -->
<bean name="userService,one,two" class="com.neu.service.UserServiceImpl"></bean>
<!--<bean name="otherUserService" class="com.neu.service.UserServiceImpl"></bean>-->
getBean方式(三种)
- 根据名字获取
getBean(名字)
- 根据类型获取
getBean(类型)
- 根据名字和类型获取(建议)
getBean(名字,类型)
前面两种需要强转类型,这种不用。
常见异常
- 找到多个异常
- 找不到异常
- 创建容器的时候提示name已经存在异常
- 等等,要开错误的关键信息
Spring xml 的配置bean
1. id、name
- 相同点:
- 都可以被getBean获取到
- id 和 name都必须唯一,,同个name不能给多个bean使用,但是一个name中能有多个值 。
- 不同点:
- name可以通过,号隔开赋值多个
2. import
[用来合并多个xml]
- 含义:
将一个大的配置文件拆解成多个文件,然后通过import整合一起。 - 案例
beanFactory.xml 【路径: config(图标有包的文件夹)/beanFactory.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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 告诉容器需要管理的对象 -->
<!-- name属性值不能重复 -->
<!-- id和name作用一样,但是name可以通过,号赋值多个 -->
<bean name="userService" class="com.neu.service.UserServiceImpl"></bean>
<!-- <bean name="otherUserService" class="com.neu.service.UserServiceImpl"></bean> -->
</beans>
在applicationContext.xml中使用import导入在类路径下的配置文件
applicationContext.xml
<!-- file:文件系统(了解) -->
<!-- classpath:从classpath(类路径)下查找,推荐使用该方法 -->
<import resource="classpath:beanFactory.xml"/>
```
在applicationContext.xml中使用import导入在类路径下的配置文件
applicationContext.xml
<!-- file:文件系统(了解) -->
<!-- classpath:从classpath(类路径)下查找,推荐使用该方法 -->
<import resource="classpath:beanFactory.xml"/>