西部数码个人网站,彩票网站是怎么做的,永嘉县住房和城乡建设局网站,模板网站难做seoSpring框架定义
Spring Framework#xff1a; Spring 最初的项目#xff0c;包括六大模块#xff1a;DAO、ORM、AOP、JEE、WEB、CORE。控制反转和面向切面编程是它的核心功能。 Spring Boot#xff1a; 一套全新的基础框架#xff0c;用来快速搭建Spring应用#xff0c;…Spring框架定义
Spring Framework Spring 最初的项目包括六大模块DAO、ORM、AOP、JEE、WEB、CORE。控制反转和面向切面编程是它的核心功能。 Spring Boot 一套全新的基础框架用来快速搭建Spring应用简化其配置和开发过程。 Spring Cloud Spring Cloud 是一系列分布式组件的集成框架。它基于Spring Boot为我们快速集成、搭建和部署分布式系统提供支持包括服务发现与注册、配置管理、负载均衡、消息总线、服务熔断、服务监控等一系列组件功能。 Spring Cloud Data Flow 基于Spring Cloud的大数据处理开发框架为基于微服务的分布式流处理和批处理数据通道开发提供了一系列编程模型和最佳实践。 Spring Data Spring Data包含若干子项目其主要目标是使得对数据的访问变得方便快捷并支持map-reduce框架和云计算数据服务。 Spring Batch 这是一个轻量级的批处理应用框架。其提供了大量可重用的组件包括日志、追踪、事务、任务作业统计、任务重启、跳过、重复、资源管理等。
IoC(inverse of control) 这是一种设计思想我们需要自己定义对象而是把对象的定义权交给容器让容器管理对象之间的依赖关系。能够实现对象的创建和管理并提供依赖注入功能的容器就是IoC容器
Spring中的Bean Spring要使用IoC容器来管理对象那么其对象必然就要符合Bean规范。Bean的id只能设置一个name可以设置多个除了第一个名字以外都是别名alias。
Bean的三类配置方式 XML配置方式 使用来定义。
注解的配置方式 Spring通过了一套注解来标注类支持用注解的方式来配置bean。但是需要引入spring-context包。 这些注解的定义几乎完全一样仅仅用于标识当前类的分类和用途。 Component或者Component(“demo1”) 标识当前类是一个普通的组件 Repository或者Repository(“demo1”) 标识当前类是一个MVC设计模式中持久层的组件。 Service 主要用于标识当前类是一个MVC设计模式中业务逻辑层的组件。 Controller 主要用于标识当前类是一个MVC设计模式中控制层的组件
通过Java类的方式来配置 链接 使用Configuration注解来标注Java类并且使用Bean注解来标注此类的方法。通过这种方式可以将此类转换成一个Bean配置类。配置包扫描后Spring便可以通过调用这些被Bean注解的方法完成Bean的初始化与依赖关系。
BeanFactory 和 FactoryBean
Spring中的BeanFactory是一个接口其定义了Spring IoC容器最基本的功能即创建和管理Bean的最基本的方法。 Object getBean(String name) throws BeanException 根据名字或者ID查找bean定义并且创建新的bean实例且返回其引用或者返回已创建的bean实例单例模式的引用。若找不到则抛出异常。 boolean containsBean(String name) 判断容器中是否有指定名称或ID的bean配置而非实例。 boolean isSingleton(String name) throws NoSuchBeanDefinitionException 判断指定名称或ID的bean配置是否使用单例模式 boolean isTypeMatch(String name, Class? targetType) 判断bean是否是targetType的子类或者实现类。 Class? getType(String name) 获取指定名称或ID的Bean配置类型 BeanFactory的衍生家族十分庞大其中DefaultListableBeanFactory是它最重要的实现类也是最基本的、可独立使用的IoC容器并且是大多数IoC容器的始祖。
FactoryBean是工厂类接口用于定义如何生产一个Bean。一般情况Spring通过反射技术创建bean并完成初始化。
ApplicationContext 与 ApplicationContextAware
ApplicationContext接口扩展自BeanFactory接口该接口实现了BeanFactory的所有功能并添加了事件传播、国际化、资源文件处理等功能。ClassPathXmlApplicationContext类是它的主要实现类之一也是最常用的IoC容器之一。它通过从应用的类路径装载并解析XML配置文件来创建IoC容器。 链接
ApplicationContextAware接口用于向Spring容器中的bean注入当前容器的引用。让需要引用当前容器的bean实现此接口即可。容器会检查所有实现了ApplicationContextAware接口的bean并调用其setApplicationContext()方法将自己注入给他。
动态注册bean配置
ClassPathXmlApplicationContext等容器类的getBeanFactory()方法用来返回定义在其内部的DefaultListableBeanFactory的实例。该对象可以实现bean的动态注册。除了直接调用容器的getBeanFactory()方法外还可以让我们的bean实现BeanFactoryAware接口让容器将DefaultListableBeanFactory对象注入给我们。
BeanDefinitionBuilder的静态方法genericBeanDefinition()被用于创建bean配置。此方法生成并返回封装bean的配置的BeanDefinition对象。可以通过此对象的addPropertyValue()和addPropertyReference()方法为其添加属性注入配置项调用addConstructorArg()等方法用于配置构造函数的参数注入。
ApplicationListener与容器事件
Spring的IoC容器运用观察者模式实现了容器范围内的事件机制。当一个容器事件产生时所有实现了ApplicationListener接口且泛型类型匹配的bean都将“收到通知”。这些bean的onApplicationEvent()方法都将被调用。 Spring 容器内置了以下4种事件和自定义事件
ContextRefreshedEvent容器装载完成事件ContextClosedEvent容器关闭事件ContextStartedEvent容器启动事件ContextStoppedEvent容器停止事件
通过继承ApplicationEvent类可以定义自定义事件。调用容器对象ApplicationContext的publishEvent(ApplicationEvent event)方法可以发布容器事件。所有监听了对应类型事件或ApplicationEvent事件的bean都将触发onApplicationEvent()事件处理方法。
Bean的基本配置
Scope属性
Scope是bean的标签属性用来配置bean的作用域。核心选项有两个。
singleton默认值表示当前bean为单例模式。prototype表示当前bean配置为所有bean实例的原型。每次从容器中获取bean时总是根据此原型产生一个新的实例。而且spring在创建此实例、完成初始化动作和依赖注入后就不再对其进行管理也就是容器不会持有这些实例的引用。
Spring Framework的Web组件还提供了request、session、global session这三个选项用于设置bean的生命周期范围分别对应HTTP请求、会话和全局会话。 Spring还支持自定义bean的作用域但并不是很实用。
parent和abstract
abstract属性是一个bool值为true的时候容器就不会去创建bean实例。类似于抽象类的概念。
parent属性用于指定要“继承”哪一个bean配置这类似于继承的概念。
factory-bean 与 factory-method
在Spring中可以使用工厂模式完成bean的创建分为静态工厂方法和非静态工厂方法两种方式。下面的配置等同于这样TimeUnit.valueOf(“MILLISECONDS”)
bean classjava.util.concurrent.TimeUnit factory-methodvalueOfconstructor-arg valueMILLISECONDS
/bean这是一个典型的静态工厂方法的形式。valueOf是静态方法调用此方法返回TimeUnit.MILLISECONDS这一枚举值。 非静态方法则是通过调用工厂类的实例方法来创建bean的。链接
bean的初始化和释放
bean的init-method用于指定当前的bean初始化方法。容器会在创建bean实例后调用此方法。与之对应的是PostConstruct 相反destroy-method被用于指定当前bean的释放方法。容器会在释放当前bean实例或者容器关闭的时候调用此方法。与之对应的是PreDestroy
依赖注入
Spring支持多种形式的依赖注入但是归纳起来可以分为属性注入和参数注入构造函数或初始化方法的参数两种其他形式都是两种注入的变种工厂模式进行的注入是属性注入和FactoryBean的结合体。Autowired的注解可以标注在成员变量上也可以标注在setter方法上。
Setter注入 要求被注入的属性必须有Setter方法。链接
工厂方式注入 可以使用ListFactoryBean一工厂方式注入ArrayList和LinkedList等属性
构造器注入 如果某个类有带参的构造函数那么可以让spring通过调用这个构造函数来创造该类实例。
注解注入 Spring提供了以下3个注解来实现依赖注入
Autowired 默认根据当前属性的类型从容器中查找匹配的bean注入。其required属性用于指定注入是不是必须的在找不到匹配的bean时是否应抛出异常。
当用在成员变量的时候容器可以自动为变量添加一个getter和setter。 用在setter或普通方法上时如果该方法拥有多个入参默认情况下Spring会自动选择类型匹配的入参来进行注入。可以使用Qualifier注解来标识某个入参以用来指定要注入的bean标识符。
Qualifier 此注解用于指定要引用的bean配置的标识符。
Lazy 用于告诉Spring容器首次用到对象时才“注入”而非容器启动之时。
Spring也支持Resource和Inject注解来实现注入 但是 Resource 并不是Spring注解而是JDK自带的注解 Autowired 只能根据类型自动匹配并且注入bean。Resource默认按照bean标识符查找和注入。可以使用name和type属性
Resource 只能声明在成员变量上Autowire也可以声明在其setter上