Spring 入门到进阶-学习笔记

目录

第一部分-JAR包的导入

第一次导入的JAR包(基础):

第二次导入的JAR包(AOP):

第三次导入的JAR包(AOP):AspectJ框架相关的JAR包

第四次导入的JAR包(JDBC和事务):

第二部分-项目实战

1.Spring的核心容器:

1.2 ApplicationContext(使用)

2. Spring的入门程序:

3.依赖注入“DI”

4.Spring 中的 Bean

4.1 Bean 的配置

4.2 Bean 的实例化

4.3 Bean 的作用域

4.4 Bean 的生命周期

4.5 Bean 的装配方式

4.5.1 基于 XML 的装配(过渡)

4.5.2 基于 Annotation 的装配(使用)

4.5.3 自动装配(了解)

4.6 注入不同数据类型

5.Spring AOP

6.Spring 的数据库开发(了解)

7.Spring 的事务管理

7.1 Spring 事务管理的 3 个核心接口

7.2 了解 Spring 事务管理的两种方式

7.3 掌握基于 XML 和 Annotation 的声明式事务的使用


第一部分-JAR包的导入

第一次导入的JAR包(基础):

1.第三方依赖包:commons-logging-1.2.jar

2.Spring 的4个基础包:

① spring-core-4.3.6.RELEASE.jar

② spring-beans-4.3.6.RELEASE.jar

③ spring-context-4.3.6.RELEASE.jar

④ spring-expression-4.3.6.RELEASE.jar

第二次导入的JAR包(AOP):

① spring-aop-4.3.6.RELEASE.jar  是 Spring 为 AOP 提供的实现包,(并支持注解扫描)

② aopallince-1.0.jar  是 AOP 联盟提供的规范包,该 JAR 包可以通过地址 http://mvnrepository.com/artifact/aopalliance/aopalliance/1.0 下载。

第三次导入的JAR包(AOP):AspectJ框架相关的JAR包

① spring-aspects-4.3.6.RELEASE.jar  Spring 为 AspectJ 提供的实现

② aspectjweaver-1.8.0.RELEASE.jar  是 AspectJ 框架所提供的规范,可以通过网址 https://mvnrepository.com/artifact/org.aspectj/aspectjweaver/1.8.10 下载

第四次导入的JAR包(JDBC和事务):

mysql-connector-java-5.1.0-bin.jar  MySQL数据库的驱动JAR包

spring-jdbc-4.3.6.RELEASE.jar  JDBC的JAR包

spring-tx-4.3.6.RELEASE.jar  Spring事务处理的JAR包

一共12个JAR包。

注意:Spring 框架包 Spring 4.3.6 版本的框架压缩包,名称为 spring-framework-4.3.6.RELEASE-dist. zip , 此 压 缩 包 可 以 通 过 地 址 https://repo.spring.io/release/org/springframework/spring/4.3.6.RELEASE/s pring-framework-4.3.6.RELEASE-dist.zip 下载。

第二部分-项目实战

1.Spring的核心容器:

1.1 BeanFactory在实际开发中用的少,这里略过。

1.2 ApplicationContext(使用

1. 2.1 通过 ClassPathXmlApplicationContext 创建(使用

ApplicationContext applicationContext = new ClassPathXmlApplicationContext(String configLoction);

1.2.2. 通过 FileSystemXmlApplicationContext 创建(不用,所以略过)

2. Spring的入门程序:

⑴ 创建项目,导入包:

⑵ 在 src 目录下,创建一个 com.neko.dao 包,并在包中创建接口 UserDao,然后在接 口中定义一个 say( )方法,

package com.neko.dao;
public interface UserDao {
  public void say();
}

⑶ 在 com.neko.dao.impl 包下,创建 UserDao 接口的实现类 UserDaoImpl,该类需要实现 接口中的 say( )方法,并在方法中编写一条输出语句,

package com.neko.dao.impl;
public class UserDaoImpl implements UserDao{
  @Override
  public void say() {
    System.out.println("userDao say Hello World!");
  }
}

(4) 在项目目录下创建 config 文件夹专门存放配置文件,再创建 Spring 的配置文件 applicationContext. xml,并在配置 文件中创建一个 id 为 userDao 的 Bean ,

<?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">
  <!-- 将指定的类配置给Spring,让Spring创建其对象的实例 -->
  <bean id="userDao" class="com.sinven.ioc.UserDaoImpl" />
</beans> 

(5) 在 com.neko.test 包下创建测试类 TestIoC,并在类中编写 main( )方法。在 main( )方法中,需要初始化 Spring 容器,并加载配置文件,然后通过 Spring 容器获取 UserDao 实例(即 Java 对象),最后调用实例中的 say( )方法,

package com.neko.test;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestIoC {
public static void main(String[] args) {
  // 1、初始化spring容器加载配置文件
  ApplicationContext applicationContext = new
  ClassPathXmlApplicationContext("config/applicationContext.xml");
  // 2、通过容器获取UserDao实例
  UserDao userDao = (UserDao) applicationContext.getBean("userDao");
  // 3、调用示例中的say()方法
  userDao.say();
  }
}

执行程序后,控制台的输出如图:

3.依赖注入“DI”

3.1 依赖注入的概念

       依赖注入( Dependency Injection ,简称 DI) 与控制反转(IoC) 的含义相同,只不过 这两个称呼是从两个角度描述的同一个概念。对于一个 Spring 初学者来说,这两种称呼很 难理解,下面我们将通过简单的语言来描述这两个概念。

       当某个 Java 对象(调用者)需要调用另一个 Java 对象(被调用者,即被依赖对象)时,在 传统模式下,调用者通常会采用"new 被调用者"的代码方式来创建对象,如图 1-8 所示。这 种方式会导致调用者与被调用者之间的耦合性增加,不利于后期项目的升级和维护。

图:

       图 1-8 调用者创建被调用者对象 在使用 Spring 框架之后,对象的实例不再由调用者来创建,而是由 Spring 容器来创 建,Spring 容器会负责控制程序之间的关系,而不是由调用者的程序代码直接控制。这样, 控制权由应用代码转移到了 Spring 容器,控制权发生了反转,这就是 Spring 的控制反转。

       从 Spring 容器的角度来看,Spring 容器负责将被依赖对象赋值给调用者的成员变量, 这相当于为调用者注入了它依赖的实例,这就是 Spring 的依赖注入,如图 1-9 所示。

图 :  

3.2 依赖注入的实现方式

  属性 setter 方法注入:指 IoC 容器使用 setter 方法注入被依赖的实例。通过调用无 参构造器或无参静态工厂方法实例化 Bean 后,调用该 Bean 的 setter 方法,即可实现基于 setter 方法的依赖注入。(在实际开发中最常用

  构造方法注入:指 IoC 容器使用构造方法注入被依赖的实例。基于构造方法的依赖注 入通过调用带参数的构造方法来实现,每个参数代表着一个依赖。

下面以属性 setter 方法注入的方式为例,实现依赖注入:

(1) 在 com.neko.service 包中,创建接口 UserService,在接口中编写一个 say( )方法,

package com.neko.service;
public interface UserService {
  public void say();
}

(2) 在 com.neko.service.impl 包中,创建 UserService 接口的实现类 UserServiceImpl,在类中 声明 userDao 属性,并添加属性的 setter 方法,

package com.neko.service.impl;
public class UserServiceImpl implements UserService {
  //声明UserDao属性
  private UserDao userDao;
  //添加UserDao属性的setter方法,用于实现依赖注入
  public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
  }
  //实现接口中方法
  @Override
  public void say() {
  //调用userDao中的say()方法,并执行输出语句
    this.userDao.say();
    System.out.println("userService say Hello World");
  }
}

 (3) 在配置文件 applicationContext.xml 中,创建一个 id 为 userService 的 Bean, 该 Bean 用于实例化 UserServiceImpl 类的信息 ,并将 userDao 的实例注入到 userService 中,

<!-- 添加一个id为userService的实例 -->
<bean id="userService" class="com.sinven.ioc.UserServiceImpl">
  <!-- 将id为userDao的Bean实例注入到UserService实例 -->
  <property name="userDao" ref="userDao"/>
</bean>

       在上述代码中,是元素的子元素,它用于调用 Bean 实例中的 setUserDao(

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值