Spring5

框架介绍

image

核心容器

  • IOC容器:这是一个对象定义他们的依赖的过程。其他对象使用它时,只能通过构造方法参数,传递给工厂方法的参数,或者被设置到对象的属性上并在此对象实例化后被构建或者从一个工厂方法返回。容器在创建bean时注入这些依赖。这个过程是从根本上看是完全相反的,所以叫做控制反转(IoC)。
  • .ApplicationContext接口表示 Spring IoC 容器,负责实例化,配置和组装 beans

spring主要类库

包名 说明
spring-aop-4.3.2.RELEASE.jar 实现了AOP的支持
spring-aspects-4.3.2.RELEASE.jar AOP框架aspects支持包
spring-beans-4.3.2.RELEASE.jar 内核支撑包,实现了处理基于xml对象存取
spring-context-4.3.2.RELEASE.jar 内核支撑包,实现了Spring对象容器
spring-context-support-4.3.2.RELEASE.jar 容器操作扩展包,扩展了一些常用的容器对象的设置功能
spring-core-4.3.2.RELEASE.jar 内核支撑包,Spring的内核
spring-expression-4.3.2.RELEASE.jar 内核支撑包,实现了xml对Spring表达式的支持



Spring容器的两个实现

  • ClassPathXmlApplicationContext:通过classpath路径直接获得加载的xml文件(推荐使用)
  • FileSystemXmlApplicationContext:通过文件路径来获得加载的xml文件。
  • @Scope(value="prototype")针对ioc容器生成bean,每次调用生成新的bean,默认是singleton单例,还有的范围request、session


开发层

  • Web:默认单例,可以通过@Scope(value="prototype")改成多例,单例主要是为了性能
  • Service :单例
  • DAO :单例
Spring创建bean的方式
  1. XML方式配置
  2. @Component,@Service,@Controler,@Repository注解,容器会为这些注解创建单例bean
  3. @Bean注解,这种方式用在Spring Boot 应用中。@Configuration 标识这是一个Spring Boot 配置类,其将会扫描该类中是否存在@Bean 注解的方法
  4. @Import,也会创建对象并注入容器中
  5. 手动注入Bean容器,有些场景下需要代码动态注入,以上方式都不适用。这时就需要创建 对象手动注入。通过DefaultListableBeanFactory注入。registerSingleton(String beanName,Object object);这里手动使用new创建了一个Location对象。并注入容器中
bean销毁
  1. 实现InitializingBean和DisposableBean初始化和销毁接口,分别重写对应的方法
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
 
public class MyBeans implements InitializingBean,DisposableBean{
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("==========catinit===");
    }
    @Override
    public void destroy() throws Exception {
        System.out.println("======销毁=======");
    }
}
  1. 自定义方法实现,初始化和销毁方式

public class MyBeans2 {
 
    
    public void init() {
        System.out.println("---init----");
    }
    
    public void destory() {
        System.out.println("====destory====");
    }
}
//在MyConfig.class中添加配置l类
@Bean(initMethod="init",destroyMethod="destory")
    public MyBeans createMyBeans2() {
        return new MyBeans2();
    }
  1. 使用JSR250提供的方式
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
 
public class MyBeans3 {
    @PostConstruct
    public void initial() {
        System.out.println("=============init==============");
    }
    @PreDestroy
    public void destory() {
        System.out.println("============destory============");
    }
@Bean
    public MyBeans3 createMyBeans3() {
        return new MyBeans3();
    }

==JSR250三个注解:==

  1. @PostConstruct:标注bean的初始化工作函数
  2. @PreDestroy:标注bean的销毁工作函数
  3. @Resource:大多数情况下等价于spring内置的注解@Autowired

@Autowired(spring内置注解) 与@Resource的区别:前者默认按类型装配,后者可以根据name、type装配如果同时制定name和type就会找到唯一存在bean,找不到则报错,而Autowired可以设置required=false来规避null时报错


依赖注入 DI(IOC)

所谓的依赖注入,就是属性不创建对象,通过配置文件的配置将Spring容器里面的对象注入给对应的属性


AOP

OP是OOP的延续, 是函数式编程的一种衍生范型. 利用AOP可以对业务逻辑的各个部分进行隔离, 从而使得业务逻辑各部分之间的耦合度降低, 提高程序的可重用性, 同时提高了开发的效率. -解耦
==底层实现:JDK动态代理、CGlib代理==

  • jdk动态代理:
    1. 需要通过Proxy类创建代理对象
    2. 创建代理对象必须要一个代理处理类(实现了接口InvocationHandler的类)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。