当前位置: 首页 > wzjs >正文

洛阳网站建设首选洛阳铭信科技中国室内设计培训排名

洛阳网站建设首选洛阳铭信科技,中国室内设计培训排名,杭州建站软件,wordpress站内链接跳转说明 Solon 的核心概念有 IoC、AOP 和本地事件总线。有人常常有误解以为 IoC 和 AOP 是 Spring 提出的,其实这两种思想在Spring 之前就已经有了,但 Spring 把这两个思想在技术上落地和推广做得很好,让 Ioc 和 AOP 广为人知。 核心概念 IoC…

说明

Solon 的核心概念有 IoC、AOP 和本地事件总线。有人常常有误解以为 IoC 和 AOP 是 Spring 提出的,其实这两种思想在Spring 之前就已经有了,但 Spring 把这两个思想在技术上落地和推广做得很好,让 Ioc 和 AOP 广为人知。

核心概念

IoC

Ioc 的全称是 Inversion of Control,是控制反转或者反转控制的意思。它是一种思想,主要解决的是对象创建和管理的问题,用于解耦依赖。Ioc有时也被称为 DI (Dependency Injection),依赖注入。在使用 IoC 的过程中,我们是通过容器来创建和管理对象的,我们也是从容器中获取对象,所以,有时我们会听到 IoC 就是容器的说法,可能只是简化的一种说法。

AOP

AOP, 全称 Aspect Oriented Programming,是面向切面编程。AOP 的目的是将横切关注点(如日志记录、事务管理、权限控制、接口限流、接口幂等等)从核心业务逻辑中分离出来,通过动态代理、字节码操作等技术,实现代码的复用和解耦,提高代码的可维护性和可扩展性。其中涉及的核心有代理,切点,切面。

本地事件总线

本地事件总线是 Solon 在应用生命周期提供的扩展机制,应用可以根据需要的事件时机点,订阅响应的事件。本地事件总线支持自定义的事件。

注意:

  1. 本地事件总线是基于应用生命周期的(应用的启停,插件的启停,bean 创建等),而不是基于业务,如果是涉及业务,可以使用使用作者的另一个作品 DamiBus。
  2. 要在事件发生前订阅事件,否则会错过时机,无法接收到事件消息。

应用生命周期

应用生命周期,是应用程序从 启动到最后停止的整个过程。应用生命周期当中存在一些关键点,可称为时机点。

SolonApp 的应用生命周期如下图所示,其中时机点包括有:一个初始化函数时机点 + 六个应用事件时机点 + 三个插件生命时机点 + 两个容器生命时机点。

作者的这张图画的很细致,一步步的把这个图走完,能加深对 Solon 的理解。

在这里插入图片描述

一个初始化函数时机点

应用开发时可扩展的时机。

@SolonMain
public class App {public static void main(String[] args) {Solon.start(App.class, args, (app) -> {//应用初始化时机点});} 
}

六个应用事件时机点

应用开发时可扩展的时机。

事件说明备注
6.AppInitEndEvent应用初始化完成事件只支持手动订阅
8.AppPluginLoadEndEvent应用插件加载完成事件只支持手动订阅
b.AppBeanLoadEndEvent应用Bean加载完成事件(即扫描完成)
e.AppLoadEndEvent应用加载完成事件(即启动完成)
::运行
g.AppPrestopEndEvent应用预停止事件
j.AppStopEndEvent应用停止事件

三个插件生命时机点

插件开发时可扩展的时机。

接口执行时机说明
7.start在应用初始化完成后执行启动
f.prestop在 ::stop 前执行预停止
h.stop在 Solon::stop 时执行停止(启用安全停止时,prestop 后等几秒再执行 stop)

两个容器生命时机点

Solon 内部的时机点,应用开发不可扩展。

接口执行时机说明
d.start在扫描完成之后执行启动
i.stop在 Solon::stop 时执行,在插件(h.stop)后执行停止

Bean 生命周期

在这里插入图片描述

被容器托管的 Bean,它的生命周期只限定在容器内部。

::new()

就是调用构造函数,是在 Bean 被扫描时,且符合条件才会执行。

注意,这个时候,Bean 还注册到容器中,还不能使用注入的字段(还未注入)。如果要初始化,推荐使用@Init 函数。

@Inject

开始执行注入。之后就会注册到容器,并通知订阅者。

start() 或 @Init

执行初始化动作,在 AppContext::start() 开始处被执行。如果使用 start() 需要实现 LifecycleBean 接口。此时 Bean 扫描已完成,理论上所有的 Bean 都已进入容器(某些特殊的 Bean 是在 AppContext.start() 时才生产的),并且所有 Bean 的字段都已完成注入。

postStart()

开始之后,AppContext::start() 结束处被执行,一般用于启动一些任务。如果使用 postStart() 需要实现 LifecycleBean 接口。

preStop()

预停止,AppContext::preStop() 时被执行。一般用来做分布式服务注销之类。如果使用 preStop() 需要实现 LifecycleBean 接口。

stop() 或 @Destroy

停止,AppContext::stop() 时被执行。一般用来做安全停止。如果使用 stop() 需要实现 LifecycleBean 接口。

容器应用

在 Solon 中,我们可以自由的选择用注解的方式,还是手动的方式来实现想要的功能。但在这里我们主要讲解注解的使用方式。

扫描

扫描一般是深度遍历指定“包名”下的 .class 文件获取类名,再通过类名从类加载器里获取元信息。

默认情况下,主类所在包名新的类都会扫描。如果需要修改导入的范围可以使用 @Import 注解,增加扫描的包名,或者导入需要的类名。

构建 / 注入

在 Solon 中,我们通过Singleton,Configuration,Bean,Component,Controller,Remoting等方式产生Bean,在Bean 对象中,我们可以 @Inject 注解注入字段。在构建和注入中需要注意的可能是条件构建和依赖注入的部分了。

注解说明
@Inject *注入托管对象(by type)
@Inject(“name”)注入托管对象(by name)
@Inject(“${name}”)注入配置(可由基础类型或结构体接收)
@Singleton单例申明(Solon 默认是单例)
@Singleton(false)非单例
@Configuration托管配置组件类(与 @Inject, @Bean 共同完成初始化配置、构建托管对象等)
@Bean配置托管对象(作用在 @Configuration 类的函数上,才有效)
@Component托管组件(支持自动代理,v2.5.2 开始支持自动代理)
@Controller控制器组件类(支持函数拦截)
@Remoting远程控制器类(有类代理;即RPC服务端)
条件构建

条件构建的意思是满足了指定条件才会构建。通过使用 @Condition 来实现,它包含如下的属性:

属性说明
onClass有类(只能一个;其实没必要多个)
onClassName有类名
onProperty有属性
onMissingBean没有 Bean
onMissingBeanName没有 Bean Name
onBean有 Bean
onBeanName有 Bean Name

更多细节,查看官网 https://solon.noear.org/article/434 。

依赖注入

依赖注入的意思是,在构建时需要使用到其他 Bean 对象。依赖注入通常使用@Configuration,配合@Bean 来实现,其中 @Bean 的函数通过参数注入的方式来获取需要的 Bean 对象。另外就是使用手动模式通过异步订阅的方式获取依赖的 Bean 对象。

以下注入的例子来自官网,更多细节,查看官网 https://solon.noear.org/article/587 。

@Configuration
public class DemoConfig {@Bean(name="db1", typed=true)public DataSource db1(@Inject("${demo.db1}") DataSource ds){ return ds;}@Beanpublic void db1Test(@Db("db1") UserMapper mapper) { //这个注入,依赖“db1”的数据源return mapper.initUsers();}
}

文章转载自:

http://H5zQQxWy.cLjpz.cn
http://L9LV38fH.cLjpz.cn
http://AhrlBxhI.cLjpz.cn
http://P0Hvwd5J.cLjpz.cn
http://AOwYM7yX.cLjpz.cn
http://wExzMMQg.cLjpz.cn
http://dgmUq3RS.cLjpz.cn
http://JZaLfTAx.cLjpz.cn
http://K6xrPNA3.cLjpz.cn
http://nnJS4sgK.cLjpz.cn
http://EOih1NS6.cLjpz.cn
http://NzBIUXLb.cLjpz.cn
http://9PYn8fFa.cLjpz.cn
http://35NQlXMq.cLjpz.cn
http://uPAQJScr.cLjpz.cn
http://9Ph5Wghm.cLjpz.cn
http://IFnDfXxl.cLjpz.cn
http://8MOvTIbO.cLjpz.cn
http://LT8XJEYl.cLjpz.cn
http://eU2MnoJ9.cLjpz.cn
http://NoyPHzG4.cLjpz.cn
http://VQ7WrFOh.cLjpz.cn
http://CknUtwyo.cLjpz.cn
http://LKw3YgKH.cLjpz.cn
http://LNUG73bi.cLjpz.cn
http://ooihfhrg.cLjpz.cn
http://x3yHbNHR.cLjpz.cn
http://EsfcxnAn.cLjpz.cn
http://vQ5vYE5a.cLjpz.cn
http://DrX8JEFK.cLjpz.cn
http://www.dtcms.com/wzjs/738549.html

相关文章:

  • 建设部执业资格注册中心网站ae有么有做gif的网站
  • 开封做网站公司深圳市建设局网站张局
  • 纺织服装网站建设规划方案wordpress 本地视频
  • 单页面网站推广方法站长之家whois
  • 中国网站名国际品牌的广州网页设计
  • 企业网站可信认证必须做吗中国招标网官网app
  • 长春网站建设网seo排名优化服务
  • 安徽二建注销网站在哪查询科技与狠活是什么意思
  • 做社区网站用什么程序好wordpress手机端怎么看
  • 服务定制网站工业设计专业就业方向
  • 仪器仪表公司网站模版英语seo什么意思
  • 免费模板素材网站有哪些宁波模板网页制作
  • 个人怎样做网站傻瓜动态建站 工具
  • 织梦移动网站个人网站能干嘛
  • 养老院网站建设的好处淮安做网站
  • 镇江模板网站网站如何做长尾词排名
  • 新手想做网站赚钱保定制作网站软件
  • 分析网站建设流程西安网站的建设
  • 高清免费爱做网站域名价格排名
  • 美工网站视频网站点击链接怎么做的
  • 网站标题名字和备案名字体育馆做网站公司
  • 深圳网站备案点重庆网站建设电话
  • 婚庆公司介绍郑州网站seo公司
  • 获取网站缩略图的asp代码抖音品牌推广方案
  • 重庆微信营销网站建设seo就业
  • 校园网站建设培训稿免费微网站哪个好用
  • 网站是空间备案学术网站怎么做
  • 做网站时怎么透明化广告软文案例
  • 襄阳做公司网站的软件公司网站策划岗位要求
  • 南通如何制作一个网站phpcms 怎么做视频网站首页