- ‘iOS开发’帮你全解iOS通知机制(轻松过面)
iOS弗森科
简述本文主要是针对iOS通知机制的全面解析,从接口到原理面面俱到。同时也解决了之前写的文章阿里、字节:一套高效的iOS面试题中关于通知的问题,相信看完此文再也不怕面试官问我任何通知相关问题了由于苹果没有对相关源码开放,所以以GNUStep源码为基础进行研究,GNUStep虽然不是苹果官方的源码,但很具有参考意义,根据实现原理来猜测和实践,更重要的还可以学习观察者模式的架构设计问题列表先把之前的问题
- linux gnustep项目,linux上安装GNUStep
博语小窝
linuxgnustep项目
1、安装GCC:(1)我安装的是gcc4.3.1,首先安装gmp-4.2.2和mpfr-2.3.1,mpfr带一个patch,这些东东是干什么用的我也不清楚;(2)因为我的gmp和mpfr都是安装在/usr/include下,所以configure时不需要指定--with-mpfr=mpfr目录--with-gmp=gmp目录。运行configure--prefix=/usr--libdir=/u
- linux gnustep项目,archlinux下配置GNUStep环境
weixin_36352523
linuxgnustep项目
8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?GNUStep主要有一下四部分组成,对应着在Archlinux系统下面我们也需要安装四个软件包。GNUstepMake:提供类似Makefile的功能,称为GNUmakefile,较Makefile好用许多。GNUstepBase:提供OpenStep的Foundation程式库,处理非图形介面的功能。GNUstepGUI
- 为gnustep项目移植到wsl的过程
etcix
记录objc学习
仔细研读/usr/share/GNUStep/Makefiles下的很多makefile文件的一些变量定义然后开始整理代码,各个文件存放到自定义的文件夹,方便管理修改GNUMakefile,这里要研读很多Makefile文件的变量定义,修正自己的赋值一个尝试例子:https://gitee.com/nidielaila/shabiwuziqi-port-to-wsl即使是没人用的技术,即使wind
- iOS 多线程 基本概念
咖啡豆8888
前言GCD源码地址GNUStep(是GNU计划项目之一,他将cocoa库重新开源实现了一遍,不是apple官方文档,但是具有一定的参考价值)常见的多线程方案一般分为这几种线程方案GCD函数//异步执行任务dispatch_async(dispatch_get_global_queue(0,0),^{});//同步执行任务dispatch_sync(dispatch_get_global_queue
- use gnustep objective-c
etcix
zig学习objective-c开发语言
firstapp#importintmain(intargc,constchar*argv[]){NSAutoreleasePool*pool=[NSAutoreleasePoolnew];NSLog(@"firststart");[pooldrain];return0;}tech专注于概念,而不是迷失在语言技术细节中编程语言的目的是成为一个更好的程序员;也就是说,在设计和实现新系统以及维护旧系统
- 【iOS】通知原理
瓯海剑
ios
我们可以通过看通知的实现机制来了解通知中心是怎么实现对观察者的引用的。由于苹果对Foundation源码是不开源的,我们具体就参考一下GNUStep的源码实现。GNUStep的源码地址为:GNUStep源码GitHub下载地址,具体源码可以进行查看。通知的主要流程通知全局对象是一个名为NCTbl的结构体,里头有三个重要的成员变量,分别是是两张GSIMapTable表:named、nameless,
- 2020 最新iOS面试题之iOS通知机制全面解析
iOS猿_员
简述本文主要是针对iOS通知机制的全面解析,从接口到原理面面俱到。同时也解决了阿里、字节:一套高效的iOS面试题中关于通知的问题,相信看完此文再也不怕面试官问我任何通知相关问题了由于苹果没有对相关源码开放,所以以GNUStep源码为基础进行研究,GNUStep虽然不是苹果官方的源码,但很具有参考意义,根据实现原理来猜测和实践,更重要的还可以学习观察者模式的架构设计问题列表先把之前的问题列出来,详细
- iOS 特性小记
iVikings
obj4源码https://opensource.apple.com/tarballs/objc4/CFRunLoopRef源码https://opensource.apple.com/tarballs/CF/GCD源码https://github.com/apple/swift-corelibs-libdispatchGNUstep源码http://www.gnustep.org/resourc
- Objective-C 代码规范
CarsonChen
Objective-C,通常写作ObjC或OC和较少用的ObjectiveC或Obj-C,是扩充C的面向对象编程语言。它主要使用于MacOSX和GNUstep这两个使用OpenStep标准的系统,而在NeXTSTEP和OpenStep中它更是基本语言。GCC与Clang含Objective-C的编译器,Objective-C可以在GCC以及Clang运作的系统上编译。1980年代初布莱德·考克斯(
- GNUstep KVC/KVO探索(一):KVC的内部实现
哦呵呵y
GNUstepKVC/KVO探索(一):KVC的内部实现GNUstepKVC/KVO探索(二):KVO的内部实现KVC全称是KeyValueCoding,定义在NSKeyValueCoding.h文件中,是一个非正式协议。KVC提供了一种间接访问其属性方法或成员变量的机制,可以通过字符串来访问对应的属性方法或成员变量。在NSKeyValueCoding中提供了KVC通用的访问方法,分别是gette
- KVC
forping
本文章的代码来源gnustep-base-1.26.0,应该和系统的实现还是不一样的,仅供参考:常用方法+(BOOL)accessInstanceVariablesDirectly;//是否允许访问成员变量,默认是yes-(void)setValue:(id)anObjectforKey:(NSString*)aKey;-(void)setValue:(id)anObjectforKeyPath:
- GNU计划之GNUstep
水中的蓝天
本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗漏或未能一一列举原文出处还望见谅与指出,另文章内容如有不妥之处还望指教,万分感谢。GNU是什么?先看看官方解释GNU是一个自由软件操作系统—就是说,它尊重其使用者的自由。GNU操作系统包括GNU软件包(专门由GNU工程发布的程序)和由第三方发布的自由软件。GNU的开发使你能够使用电脑而
- GNUstep
China架构师
GitHub地址GNUstep简单来说,GNUstep是实现OpenStep接口的开放软件(OpenSource)计划,目标为提供跨平台的面向对象程序开发环境。C语音有DennisRitchie于20世纪70年代早期首创,20世纪70年代晚期才获得广泛支持并流行开来。UNIX操作系统的普及也促进C语音的普及,UNIX完全有C语音编写。Objective-C主要由Stepstone公司的布莱德·考克
- 《Objective-C高级编程 iOS与OS X多线程与内存管理》3
我才是臭吉吉
内存管理篇:3.autoreleaseautorelease的实质:将创建的对象加入到NSAutoreleasePool管理“数组”中,并告知ARC系统暂时不要对此对象进行处理。待pool对象在其所属的NSRunLoop循环一次完成,准备释放(drain)时,对“数组”中的所有对象依次调用release方法。此时ARC再对对象进行内存管理。GNUstep的实现GNUstep的版本使用了同NSMut
- Runloop
tigerfly66
runloop的理解借助了MJ视频以及开源文档https://github.com/apple/swift-corelibs-foundation/https://blog.csdn.net/u014795020/article/details/72084735GNUstep源码下载地址:http://www.gnustep.org/resources/downloads.php参考https:/
- window下的Objective-c配置
scv
安装软件MinGW注意勾选objective-c选项;GNUStep注意安装先后顺序,先安装msys,后安装Core;添加windows环境变量到path如添加F:\MinGW\bin到环境变量,添加后重新打开GNUStep的Shell编译配置gcc-o[nameoftheprogram][filename.m]-I/GNUstep/System/Libraries/Headers-L/GNUst
- alloc retain release dealloc内部实现原理解析
有一种再见叫青春
由于Foundation框架并没有公开,首先使用GNUstep说明idobj=[[NSObjectalloc]init];上述调用NSObject类的alloc类方法在NSObject.m的源代码实现如下:+(id)alloc{return[selfallocwithzone:NSDefaultMallocZone()];}+(id)allocWithZone:(NSZone*)z{returnN
- 2020 阿里、字节iOS面试题之Runtime相关问题1(附答案)
iOS猿_员
目录2020阿里、字节iOS面试题之Runtime相关问题12020阿里、字节iOS面试题之Runtime相关问题22020阿里、字节iOS面试题之Runtime相关问题3面试题的结构分类和细化runtime相关问题runtime结构模型内存管理关联属性或者hook相关的MethodSwizzleNSNotification相关参考GNUStep源码NSNotification实现原理相关Runl
- ios学习之旅---oc面向对象的特点
爱上ios
iosios编程面向对象设计objective-c
1.OC简介Objective-C是一种面向对象的计算机语言,BradJCox1980s设计了Objective-C,该语言是基于SmallTalk-80。1988NeXT发布了Objective-C,它的开发环境和类库叫“NEXTSTEP”,1994年NeXT与Sun发布了标准的NEXTSTEP系统,取名“OPENSTEP”,软件自由基金会OPENSTEP版本叫GNUStep。1996苹果公司开
- 一起来学Objective-C(1)——Window下开发环境安装和Hello World
ts_rfl
IOSmakefileshell扩展gcc编程语言
Objective-C是在C语言的基础上的扩展,是一种面向对象的编程语言。这里假设读者有面向对象的编程基础。1.下载并安装开发环境到http://www.gnustep.org/experience/Windows.html下载以下四个文件:PackageRequired?StableUnstableNotesGNUstepMSYSSystemRequired0.28.1-MSYS/MinGWSy
- Windows如何进行Object-C的开发
翔之光
iPhone应用
Windows下Object-C编译环境的搭建:1.下载并安装以下两个软件:GNUstepSystem(我用的版本是:gnustep-msys-system-0.25.1-setup.exe)GNUstepCore(我用的版本是:gnustep-core-0.25.0-setup.exe)下载地址:http://www.gnustep.org/experience/Windows.html安装方法
- AndroidStudio如何快速制作.so
白玉梁
AndroidAndroid笔记
之前写过一篇Eclipse制作.so的文章,http://blog.csdn.net/baiyuliang2013/article/details/44306921使用的是GNUstep模拟Linux环境,过程现在看来是想相当麻烦,后来发现一个简单的方法就是通过项目右键添加NativeSupprot...可以快速创建.so而不使用命令行,由于AS越来越被大家使用,所以Eclipse的制作过程就不再
- objective-c中文教程
abbottduan
iPhone版块
開始吧下載這篇教學設定環境為了編譯GNUstep應用程式,必須先執行位於/usr/GNUstep/System/Makefiles/GNUstep.sh的GNUstep.sh這個檔案。這個路徑取決於你的系統環境,有些是在/usr,some/usr/lib,有些是/usr/local。如果你的shell是以csh/tcsh為基礎的shell,則應該改用GNUStep.csh。建議把這個指令放在.ba
- XP系统上运行objective-c程序
allhopeisgone
学习笔记
首先需要在http://www.gnustep.org/网站上,下载4个安装程序:UstepMSYSSystem、GNUstepCore、GNUstepDevel、CairoBackend。然后依次安装完毕文件可以借助各种编程工具进行编写编写好的文件用“.m”后缀放入默认路径为“C:\GNUstep\home\Administrator”的文件夹内。这里比较重要的是需要一个make配置文件,名字必
- Linux Object-C 编译环境安装
Rex
Tools&Software
原文:http://www.techotopia.com/index.php/Installing_and_Using_GNUstep_and_Objective-C_on_Linuxsudoapt-getinstallgnustepsudoapt-getinstallgnustep-develsudoapt-getinstallgobjc./usr/share/GNUstep/Makefiles
- Objective-C 内存管理之alloc/retain/release/dealloc实现原理
weixin_34329187
GNUstep开源框架的实现以GNUstep开源框架为例(与Foundation框架相类似)/***Allocatesanewinstanceofthereceiverfromthedefault*zone,byinvoking+allocWithZone:with*NSDefaultMallocZone()asthezoneargument.*Returnsthecreatedinstance.
- NSOperation, NSOperationQueue 原理探析
weixin_34150830
通过GNUstep的Foundation来尝试探索下NSOperation,NSOperationQueue示例程序写一个简单的程序-(void)viewDidLoad{[superviewDidLoad];//Doanyadditionalsetupafterloadingtheview,typicallyfromanib.[selfconfigurationQueue];LDNSOperati
- Linux下的objective-c 的简单使用和一些问题
葫芦娃二娃
unix编程杂谈
我是ubuntu16.04,官方教程如下:https://www.techotopia.com/index.php/Installing_and_Using_GNUstep_and_Objective-C_on_Linux使用这个教程必须安装sudoaptinstallgobjcgobjc++gnustep-makegnustep-devel安装完后配置编译环境:./usr/share/GNUst
- GNUstep在win7的sublime下编译OC
安徒生_
基础知识
1、安装GNUstep:官网上写GNUstep需在MinGW下运行,但我原来装过MinGW,所以不知道如果不装的话,会有什么后果。GNUsteprunsonwindowsthoughtheMinGWenvironment.Generatedapplications,eveniftargetedstand-alone,willrequireMinGWtorun.Werecommendtoinstal
- 安装数据库首次应用
Array_06
javaoraclesql
可是为什么再一次失败之后就变成直接跳过那个要求
enter full pathname of java.exe的界面
这个java.exe是你的Oracle 11g安装目录中例如:【F:\app\chen\product\11.2.0\dbhome_1\jdk\jre\bin】下的java.exe 。不是你的电脑安装的java jdk下的java.exe!
注意第一次,使用SQL D
- Weblogic Server Console密码修改和遗忘解决方法
bijian1013
Welogic
在工作中一同事将Weblogic的console的密码忘记了,通过网上查询资料解决,实践整理了一下。
一.修改Console密码
打开weblogic控制台,安全领域 --> myrealm -->&n
- IllegalStateException: Cannot forward a response that is already committed
Cwind
javaServlets
对于初学者来说,一个常见的误解是:当调用 forward() 或者 sendRedirect() 时控制流将会自动跳出原函数。标题所示错误通常是基于此误解而引起的。 示例代码:
protected void doPost() {
if (someCondition) {
sendRedirect();
}
forward(); // Thi
- 基于流的装饰设计模式
木zi_鸣
设计模式
当想要对已有类的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有的功能,并提供加强功能。
自定义的类成为装饰类
模仿BufferedReader,对Reader进行包装,体现装饰设计模式
装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象功能,提供更强的功能。
装饰模式比继承灵活,避免继承臃肿,降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能该
- Linux中的uniq命令
被触发
linux
Linux命令uniq的作用是过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行。在正常情 况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如 果输入文件用“- ”表示,则从标准输入读取。
AD:
uniq [选项] 文件
说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个
- 正则表达式Pattern
肆无忌惮_
Pattern
正则表达式是符合一定规则的表达式,用来专门操作字符串,对字符创进行匹配,切割,替换,获取。
例如,我们需要对QQ号码格式进行检验
规则是长度6~12位 不能0开头 只能是数字,我们可以一位一位进行比较,利用parseLong进行判断,或者是用正则表达式来匹配[1-9][0-9]{4,14} 或者 [1-9]\d{4,14}
&nbs
- Oracle高级查询之OVER (PARTITION BY ..)
知了ing
oraclesql
一、rank()/dense_rank() over(partition by ...order by ...)
现在客户有这样一个需求,查询每个部门工资最高的雇员的信息,相信有一定oracle应用知识的同学都能写出下面的SQL语句:
select e.ename, e.job, e.sal, e.deptno
from scott.emp e,
(se
- Python调试
矮蛋蛋
pythonpdb
原文地址:
http://blog.csdn.net/xuyuefei1988/article/details/19399137
1、下面网上收罗的资料初学者应该够用了,但对比IBM的Python 代码调试技巧:
IBM:包括 pdb 模块、利用 PyDev 和 Eclipse 集成进行调试、PyCharm 以及 Debug 日志进行调试:
http://www.ibm.com/d
- webservice传递自定义对象时函数为空,以及boolean不对应的问题
alleni123
webservice
今天在客户端调用方法
NodeStatus status=iservice.getNodeStatus().
结果NodeStatus的属性都是null。
进行debug之后,发现服务器端返回的确实是有值的对象。
后来发现原来是因为在客户端,NodeStatus的setter全部被我删除了。
本来是因为逻辑上不需要在客户端使用setter, 结果改了之后竟然不能获取带属性值的
- java如何干掉指针,又如何巧妙的通过引用来操作指针————>说的就是java指针
百合不是茶
C语言的强大在于可以直接操作指针的地址,通过改变指针的地址指向来达到更改地址的目的,又是由于c语言的指针过于强大,初学者很难掌握, java的出现解决了c,c++中指针的问题 java将指针封装在底层,开发人员是不能够去操作指针的地址,但是可以通过引用来间接的操作:
定义一个指针p来指向a的地址(&是地址符号):
- Eclipse打不开,提示“An error has occurred.See the log file ***/.log”
bijian1013
eclipse
打开eclipse工作目录的\.metadata\.log文件,发现如下错误:
!ENTRY org.eclipse.osgi 4 0 2012-09-10 09:28:57.139
!MESSAGE Application error
!STACK 1
java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContai
- spring aop实例annotation方法实现
bijian1013
javaspringAOPannotation
在spring aop实例中我们通过配置xml文件来实现AOP,这里学习使用annotation来实现,使用annotation其实就是指明具体的aspect,pointcut和advice。1.申明一个切面(用一个类来实现)在这个切面里,包括了advice和pointcut
AdviceMethods.jav
- [Velocity一]Velocity语法基础入门
bit1129
velocity
用户和开发人员参考文档
http://velocity.apache.org/engine/releases/velocity-1.7/developer-guide.html
注释
1.行级注释##
2.多行注释#* *#
变量定义
使用$开头的字符串是变量定义,例如$var1, $var2,
赋值
使用#set为变量赋值,例
- 【Kafka十一】关于Kafka的副本管理
bit1129
kafka
1. 关于request.required.acks
request.required.acks控制者Producer写请求的什么时候可以确认写成功,默认是0,
0表示即不进行确认即返回。
1表示Leader写成功即返回,此时还没有进行写数据同步到其它Follower Partition中
-1表示根据指定的最少Partition确认后才返回,这个在
Th
- lua统计nginx内部变量数据
ronin47
lua nginx 统计
server {
listen 80;
server_name photo.domain.com;
location /{set $str $uri;
content_by_lua '
local url = ngx.var.uri
local res = ngx.location.capture(
- java-11.二叉树中节点的最大距离
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class MaxLenInBinTree {
/*
a. 1
/ \
2 3
/ \ / \
4 5 6 7
max=4 pass "root"
- Netty源码学习-ReadTimeoutHandler
bylijinnan
javanetty
ReadTimeoutHandler的实现思路:
开启一个定时任务,如果在指定时间内没有接收到消息,则抛出ReadTimeoutException
这个异常的捕获,在开发中,交给跟在ReadTimeoutHandler后面的ChannelHandler,例如
private final ChannelHandler timeoutHandler =
new ReadTim
- jquery验证上传文件样式及大小(好用)
cngolon
文件上传jquery验证
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery1.8/jquery-1.8.0.
- 浏览器兼容【转】
cuishikuan
css浏览器IE
浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同
问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。
碰到频率:100%
解决方案:CSS里 *{margin:0;padding:0;}
备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设
- Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
daizj
shell$#$?特殊变量
前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:
$echo $$
运行结果
29949
特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个
- 程序设计KISS 原则-------KEEP IT SIMPLE, STUPID!
dcj3sjt126com
unix
翻到一本书,讲到编程一般原则是kiss:Keep It Simple, Stupid.对这个原则深有体会,其实不仅编程如此,而且系统架构也是如此。
KEEP IT SIMPLE, STUPID! 编写只做一件事情,并且要做好的程序;编写可以在一起工作的程序,编写处理文本流的程序,因为这是通用的接口。这就是UNIX哲学.所有的哲学真 正的浓缩为一个铁一样的定律,高明的工程师的神圣的“KISS 原
- android Activity间List传值
dcj3sjt126com
Activity
第一个Activity:
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import a
- tomcat 设置java虚拟机内存
eksliang
tomcat 内存设置
转载请出自出处:http://eksliang.iteye.com/blog/2117772
http://eksliang.iteye.com/
常见的内存溢出有以下两种:
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: Java heap space
------------
- Android 数据库事务处理
gqdy365
android
使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。事
- Java 打开浏览器
hw1287789687
打开网址open浏览器open browser打开url打开浏览器
使用java 语言如何打开浏览器呢?
我们先研究下在cmd窗口中,如何打开网址
使用IE 打开
D:\software\bin>cmd /c start iexplore http://hw1287789687.iteye.com/blog/2153709
使用火狐打开
D:\software\bin>cmd /c start firefox http://hw1287789
- ReplaceGoogleCDN:将 Google CDN 替换为国内的 Chrome 插件
justjavac
chromeGooglegoogle apichrome插件
Chrome Web Store 安装地址: https://chrome.google.com/webstore/detail/replace-google-cdn/kpampjmfiopfpkkepbllemkibefkiice
由于众所周知的原因,只需替换一个域名就可以继续使用Google提供的前端公共库了。 同样,通过script标记引用这些资源,让网站访问速度瞬间提速吧
- 进程VS.线程
m635674608
线程
资料来源:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397567993007df355a3394da48f0bf14960f0c78753f000 1、Apache最早就是采用多进程模式 2、IIS服务器默认采用多线程模式 3、多进程优缺点 优点:
多进程模式最大
- Linux下安装MemCached
字符串
memcached
前提准备:1. MemCached目前最新版本为:1.4.22,可以从官网下载到。2. MemCached依赖libevent,因此在安装MemCached之前需要先安装libevent。2.1 运行下面命令,查看系统是否已安装libevent。[root@SecurityCheck ~]# rpm -qa|grep libevent libevent-headers-1.4.13-4.el6.n
- java设计模式之--jdk动态代理(实现aop编程)
Supanccy2013
javaDAO设计模式AOP
与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。
&
- Spring 4.2新特性-对java8默认方法(default method)定义Bean的支持
wiselyman
spring 4
2.1 默认方法(default method)
java8引入了一个default medthod;
用来扩展已有的接口,在对已有接口的使用不产生任何影响的情况下,添加扩展
使用default关键字
Spring 4.2支持加载在默认方法里声明的bean
2.2
将要被声明成bean的类
public class DemoService {