Spring学习笔记

IOC(Inversion of Control)控制反转 DI(Dependency Injection)依赖注入

反转资源的获取方向,由spring容器创建对象

配置bean的方式

在xml文件中通过bean结点来配置bean


如果没有指定唯一的id会自动以完整类名作为默认值

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
    public static void main(String[] args) {
        //获取容器对象
         ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
         //通过容器对象来获取配置的 javabean
         Person person=(Person)ioc.getBean("person1");
         System.out.println(person);
    }
}

ApplicationContext类的主要实现类

ClassPathXmlApplicationContext:从类路径下加载配置文件
FileSystemXmlApplicationContext:从文件系统中加载配置文件
WebApplicationContext:专门为WEB应用而准备的,它允许从相对于web根路径中完成初始化工作

获取bean的三种方式

  1. getBean(String id)(要强转)
  2. getBean(Class)
  3. getBean(String id,Class)

给构造器传递参数


注入属性的细节

如果注入的值具有特殊的字符要用但是这种方式只能通过value标签注入

引用其他bean

//引用另外一个bean
可以配置级联属性
class="con.pxc.Person>




集合属性

通过标签来注入


spring2.5后依赖注入可以使用p命名空间来简化操作

自动装配(用的比价少)

byType:按照类型自动装配,这种方式不好的地方是如果在IOC容器中存在两个相同属性的bean会报错
byName:按照bean的id名确保唯一

bean之间的关系

Spring学习笔记_第1张图片
Paste_Image.png
Paste_Image.png

Bean的作用域

Spring学习笔记_第2张图片
Paste_Image.png

Spring EL表达式 用的是#

  • 引用其他的bean


  • 调用方法以及引用对象中的属性







  • 进行运算





  • 支持正则和三目运算符

bean的生命周期

Spring学习笔记_第3张图片
Paste_Image.png



bean的后置处理器

Spring学习笔记_第4张图片
Paste_Image.png
Spring学习笔记_第5张图片
Paste_Image.png

如果bean没有初始化方法也会执行后置处理器

Bean的配置方式

  1. 通过全类名:也就是反射

  2. 通过工厂方法:
    静态工厂方法:

Spring学习笔记_第6张图片
Paste_Image.png

包含静态工厂方法类



实例工厂方法:

Spring学习笔记_第7张图片
Paste_Image.png






  1. FactoryBean:
Spring学习笔记_第8张图片
Paste_Image.png

配置一下:

基于注解方式配置bean

  • @Component(value="pxc1")
    无需指定创建的bean的id值,有默认的命名策略,将类名首字母小写作为默认的id值,如果设置value属性值就是用户指定的id
    然后需要在配置文件中告知spring要扫描哪个包,首先得导入context的命名空间,然后做一下配置

  • @Respository 标识持久层bean组件

  • @Serivice标识业务层

  • @Controller标识控制层

都可以用@Autowired来完成自动装配@Autowired是按照类型进行装配
@Resource是按照名字装配,@Inject和@Autowired一样只不过没有require属性

AOP(切面编程)

  • 如果没有aop,将核心业务和普通业务分离使用代理模式

第一步:

Spring学习笔记_第9张图片
Paste_Image.png

第二步:

Spring学习笔记_第10张图片
Paste_Image.png

第三步:

Spring学习笔记_第11张图片
Paste_Image.png

主方法调用:

![Uploading Paste_Image_235358.png . . .]

AOP的作用简单来说就是在执行方法前,中后干一些事情,比如数据库事务的提交,数据的关闭,只要在项目开发前配置完成,程序员便不用再考虑这些,切面编程有两种方式。

AOP的术语:

Spring学习笔记_第12张图片
Spring学习笔记_第13张图片
Paste_Image.png
  1. 切面(Aspect):横切关注点模块化(抽象),具有相同功能的横切关注点可以抽象成一个切面。(前置日志后后置日志抽象成一个切面)
  2. 横切关注点。业务处理当中,不同业务的分离点
  3. 通知(Advice):切面必须要完成的工作
  4. 目标(Target):被通知的对象(被代理的对象)
  5. 连接点(JoinPoint)Spring允许加入通知的方法,是横切关注点的另一种表现形式
  6. 切点(pointcut):AOP通过切点定为到特定的连接点
  • 基于AspectJ注解
Spring学习笔记_第14张图片
image.png
  1. 写一个切面类,@Aspect标注
  2. 共同业务加入到切面。业务共同的方法
    3.前置通知,后置通知@Before("execption(public int 完整的方法名)")
    后置通知无论执行是否有异常都会执行。
  3. 需要在spring配置文件中开启aop配置
  4. 要加很多@Component注解

切点表达式

*:通配符,所有
..:在方法的参数列表中使用,不限定类型,顺序,个数

Spring学习笔记_第15张图片
Paste_Image.png

在通知方法的内部访问连接点的细节

在通知方法的参数中,加入一个JoinPoint类型的参数
JoinPoint的一些方法:

获取参数列表:jp.getArgs();
获取方法的名称:jp.getSignature().getName();

返回通知

@After注解无论方法返回过程中是否抛出异常都会执行,@AfterReturing必须是返回成功才会执行,加了这个注解后添加一个returning属性可以得到返回值

Paste_Image.png

异常通知 @AfterThrowing

Spring学习笔记_第16张图片
Paste_Image.png

环绕通知(用的少)

Spring学习笔记_第17张图片
Paste_Image.png
Spring学习笔记_第18张图片
Paste_Image.png

切面的优先级

Spring学习笔记_第19张图片
Paste_Image.png

重用切入点

Spring学习笔记_第20张图片
Paste_Image.png
  • 基于XML配置
Spring学习笔记_第21张图片
image.png

spring对JDBC的支持

Spring学习笔记_第22张图片
Paste_Image.png

你可能感兴趣的:(Spring学习笔记)