- 1.Spring是一个轻量级开源框架
- 1.2 创建maven项目
- 引入maven依赖pom.xml
- 1.2 定义接口于实体类
- 1.3 创建Spring配置文件(一般叫 applicationContext.xml)
- 1.<bean />:用于定义一个实例对象。一个实例对应一个 bean 元素。
- 2.id:该属性是 Bean 实例的唯一标识,程序通过 id 属性访问 Bean,Bean 与 Bean 间的依
- 赖关系也是通过 id 属性关联的。
- 3.class:指定该 Bean 所属的类,注意这里只能是类,不能是接口。
- 1.4 使用spring创建非自定义类对象
- spring 配置文件加入 java.util.Date 定义:<bean id="myDate" class="java.util.Date" />
- 1.2 创建maven项目
- 2.核心技术
- 2.IOC控制反转
- 2.1 控制反转含义:
- 对象控制权的转移,从程序代码本身反转到了外部容器。通过容器实现对象的创建,属性赋值,
- 依赖的管理。
- Spring 框架使用依赖注入(DI )实现 IoC 。
- 2.2 容器接口和实现类
- ApplicationContext 接口
- A 、 配置文件在类路径下
- 若 Spring 配置文件存放在项目的类路径下,则使用 ClassPathXmlApplicationContext 实现
- 类进行加载。
- B 、 ApplicationContext 容器中对象的装配时机
- ApplicationContext 容器,会在容器对象初始化时,将其中的所有对象一次性全部装配好。
- 以后代码中若要使用到这些对象,只需从内存中直接获取即可。执行效率较高。但占用内存。
- C 、 使用 spring 容器 创建的 的 java 对象
- A 、 配置文件在类路径下
- ApplicationContext 接口
- 2.3 基于XML的DI
- 2.7.1 注入分类
- (1 ) set 注入(掌握)
- A、简单类型
- B、引用类型
- (2 ) 构造注入( 理解)
- (1 ) set 注入(掌握)
- 2.7.1 注入分类
- 2.4 引用类型属性自动注入
- (1)byName方式自动注入
- 根据类中的字段名引用
- (2)byType方式自动注入
- 根据类中的字段类型应用
- 多个配置文件的引用
- 实质上就是为了分别其中各个类的数据冗余——方便程序员查看其中某个模块的功能(修改)
- 引用 <import resource="classpath:da04/spring-student.xml"/>
- <import resource="classpath:da04/spring-school.xml"/>
- 是target文件夹下classess文件夹下的资源文件
- (1)byName方式自动注入
- 2.1 控制反转含义:
- 2.2 AOP 面向切面编程
- 3.1 面向切面编程是从动态角度考虑程
- 序运行过程。
- 非业务方法(交叉业务逻辑)
- 1)doTransation():用于事务处理
- 2)doLog():用于日志处理
- 非业务方法(交叉业务逻辑)
- 3.2 AOP 底层,就是采用动态代理模式实现的:
- A.JDK 的动态代理。
- B.CGLIB的动态代理。
- 3.3 好处:
- 注意:面向切面编程只是面向对象编程的一种补充。
- 1.减少重复;
- 2.专注业务;
- 3.4 AOP 编程术语( 掌握)
- A.减少重复
- B.专注业务
- 3.5 编程术语的掌握
- (1)切面(aspect)
- 表示增强功能,也就是一堆代码,完成某一个功能。非业务功能,常见的切面功能有日志,事务,统计信息,参数检查,权限验证。
- (2)连接点(joinPoint)
- 连接业务方法和切面的位置。就某类中的业务方法。
- (3)切入点(Pointcut)
- 指多个连接点方法的集合。多个方法
- (4)目标对象(target)
- 给哪个类方法增加功能,这个类就是目标对象。
- (5)通知(Advice)
- 表示切面功能执行的时间。
- (1)切面(aspect)
- 2.3 spring集成mybatis
- 1.先建立数据库,以及数据表
- 2.在pom.xml文件中导入依赖
- <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.2.5.RELEASE</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.1</version></dependency><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.9</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.12</version></dependency>插件:<build><resources><resource><directory>src/main/java</directory><!--所在的目录--><includes><!--包括目录下的.properties,.xml 文件都会扫描到--><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>false</filtering></resource></resources><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build>
- 3.定义实体类例如:User
- 4.定义Userdao接口
- 5.定义映射文件 mapper
- 6.定义 Service 接口和实现类
- 7.定义 MyBatis 主配置文件
- 8.修改 Spring 配置文件
- (1 ) 数据源的配置
- Druid 数据源 DruidDataSource
- 地址:https://github.com/alibaba/druid
- (2 ) 从属性文件读取数据库连接信息
- (3 ) 注册 SqlSessionFactoryBean
- (4 ) 定义 Mapper 扫描配置器 MapperScannerConfigurer
- (1 ) 数据源的配置
- 9.向 Service 注入接口名
- 10.Spring 配置文件全部配置
- 2.IOC控制反转
- 3.基于注解的DI
- 4.1 定义Bean的注解@Component(@Component 不指定 value 属性,bean 的 id 是类名的首字母小写。)(掌握)
- 1)@Repository 用于对DAO实现类进行注解
- 2)@Service 创建业务层对象,业务层对象可以加入事务功能.
- 3)@Controller 用于对Controller实现类进行注解
- 4)@Repository,@Service,@Controller 是对@Component 注解的细化,标注不同层的对
- 象。即持久层对象,业务层对象,控制层对象。
- 4.2 简单类型属性注入@Value(掌握)
- 1)该注解完成属性注入时,类中无需setter。如果需要,则也可已将其加到setter上。
- 2)Value属性用于指定要注入的值。
- 4.3 byType 自动注入@Autowired(掌握)
- 1)使用注解@Autowired,该注解默认使用按类型自动装配Bean的方式
- 2)使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加
- 到 setter 上。
- 4.4 byName 自动注入@Autowired 与@Qualifier( 掌握)
- 1)需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的 value 属性用
- 于指定要匹配的 Bean 的 id 值。
- 2)类中无需 set 方法,也可加到 set 方法上。
- 3)@Autowired 还有一个属性required,默认值为true,表示当匹配失败后,会终止程序运行。若将其值设置为false,则匹配失败,将会被忽略,未匹配的属性值为null。
- 4.5 JDK 注解@Resource (默认是按名称注入。)自动注入( 掌握)
- 1)byType注入引用类型属性
- @Resource 注解不带任何参数,采用默认按名称的方式注入,按名称不能注入bean,怎会按照类型进行Bean的匹配注入。
- 2)byName注入引用类型属性
- @Resource注解指定其name属性,测name的值即为按照名称进行匹配的Bean的id。
- 1)byType注入引用类型属性
- 4.6 注解与xml的对比(该用哪个)
- 1.经常改的就用xml
- XML优点:
- 1)配置和代码是分离的
- 2)在xml中做修改,无需编译代码,只需重启服务器即可将新的配置加载。
- XML缺点:
- 编写麻烦、效率低,大型项目过于复杂。
- XML优点:
- 2.不经常改的就用注解
- 注解优点:
- 1)方便
- 2)直观
- 3)高效(代码少,不复杂)
- 注解优点:
- 1.经常改的就用xml
- 4.1 定义Bean的注解@Component(@Component 不指定 value 属性,bean 的 id 是类名的首字母小写。)(掌握)
- 4.spring事务(重点)
- 注解:通常访问数据库的方式
- 1.JDBC访问数据库处理事务
- (1)connection conn;
- (2)conn.commit();
- (3)conn.rollback();
- 2.mybatis访问数据库
- (1)SqlSession.commit();
- (2)SqlSession.rollback();
- 3.hibernate访问数据库
- (1)Session.commit();
- (2)Session.rollback();
- 1.JDBC访问数据库处理事务
- 4.1 Spring 的事务管理
- (1)使用 Spring 的事务注解管理事务
- (2)使用 AspectJ 的 AOP 配置管理事务
- 4.2 Spring 事务管理 API
- 控制事务的三个方面
- (1)事务的隔离级别
- ➢ DEFAULT:采用 DB 默认的事务隔离级别。MySql 的默认为REPEATABLE_READ; Oracle默认为 READ_COMMITTED。➢ READ_UNCOMMITTED:读未提交。未解决任何并发问题。➢ READ_COMMITTED:读已提交。解决脏读,存在不可重复读与幻读。➢ REPEATABLE_READ:可重复读。解决脏读、不可重复读,存在幻读➢ SERIALIZABLE:串行化。不存在并发问题。
- (2)事务的超时时间
- 设置事务执行的时间,单位:秒,执行的时间>设置的时间,则 进行事务回滚
- (3)事务的传播行为
- PROPAGATION_REQUIRED 指定的方法必须在事务内执行
- PROPAGATION_REQUIRES_NEW 总是新建一个事务,若当前存在事务,就将当前事务挂起,直到新事务执行完毕。
- PROPAGATION_SUPPORTS 指定的方法支持当前事务,但若当前没有事务,也可以以非事务方式执行。
- (1)事务的隔离级别
- 控制事务的三个方面
- 4.3 Spring 的事务注解管理事务( 掌握)
- 1. 声明事务管理器
- <!--1.声明事务管理器 回滚,提交等--> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!--指定数据源--> <property name="dataSource" ref="dataSource"/> </bean>
- 2. 开启注解驱动
- <!--2.开启事务注解驱动,告诉spring使用注解管理对象,创建代理对象 transaction-manager;管理事务的id 要用tx标签需要加入:xmlns:tx="http://www.springframework.org/schema/tx" --> <tx:annotation-driven transaction-manager="transactionManager"/>
- 3. 业务层 public 方法加入事务属性
- @Transactional( propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, readOnly = false, rollbackFor = { NullPointerException.class,NotActiveException.class } )
- 4.测试此方法
- 1. 声明事务管理器
- 注解:通常访问数据库的方式
- 5.Spring与Web
- 1.创建一个web项目
- (1)新建项目
- (2)写代码,配置文件,导包
- (3)写主页jsp
- (4)定义Servlet(重点)
- ApplicationContext ctx = new ClassPathXmlApplicationContext(config); System.out.println("容器对象的信息:"+ctx);
- (5)写成功运行jsp
- (6)web.xml 注册 Servlet
- //注册监听器 <servlet> <servlet-name>RegisterServlet</servlet-name> <servlet-class>com.xiaoming.controller.RegisterServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>RegisterServlet</servlet-name> <url-pattern>/reg</url-pattern> </servlet-mapping>
- 2.使用 Spring 的器 监听器 ContextLoaderListener( 掌握)
- 1.maven 依赖 pom.xml
- <dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.2.5.RELEASE</version></dependency>
- 2.注册监听器 ContextLoaderListener
- <context-param> <!--contextConfigLocation:表示配置文件的路径。--> <param-name>contextConfigLocation</param-name> <!--自定义配置文件的路径--> <param-value>classpath:spring.xml</param-value> </context-param>
- 3.指定 Spring 配置文件的位置<context-param>
- <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
- 4 .获取 Spring 容器对象
- (1 ) 直接从 ServletContext 中获取
- WebApplicationContext ctx=null; //获取servletContext中的容器对象,创建好的容器对象,拿来就用 String key = WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE; Object attr = getServletContext().getAttribute(key); if (attr!=null){ ctx=(WebApplicationContext) attr; }
- (2 ) 通过 WebApplicationContextUtils 获取
- // 使用框架中的方法,获取容器对象 ServletContext sc = getServletContext(); ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
- (1 ) 直接从 ServletContext 中获取
- 1.maven 依赖 pom.xml
- 1.创建一个web项目
相关文章
- 09-29如何快速搭建一个像“天猫精灵”的智能语音助手?
- 09-29【Spring全家桶系列超全整理之SpringBoot框架】9 SpringBoot整合elasticsearch检索功能
- 09-29集成学习(Ensembling Learning)
- 09-29自己写一个在线学习网站记录之按照不同的筛选条件筛选符合条件的数据并显示
- 09-29Docker+Flask初学快速上手
- 09-29【C++学习之路】派生类的构造函数(三)
- 09-29Python学习笔记_列表
- 09-29OpenGL 中关于ImageTexture使用中遇到的两个问题 —— 快速清空 与 读写错误
- 09-29《动手学深度学习》Task06-1:批量归一化和残差网络
- 09-29WPF零基础学习-常用控件1