官网
添加链接描述
耦合,手拉着手,她动我也动,他往左,我也往左
解耦,就是卡了一个板,我和她各牵一个绳,她想走,把绳子松开就是了
虽然还有依赖关系,但是依赖关系很松了就是
目的就是可替换,妈的,白悲伤了 中间隔个板,他两牵着绳,下层松手了,换了个人。因为隔着个板子,所以上层是不知道下层变了的 就是为了service变动,控制层不用动 后续居然能项目拆分????!!!! 后续会把controller作为一个独立的项目 service 作为一个独立的项目 dao作为一个独立的项目来存在的 也就是一个个独立的jar包的方式 如果还是耦合很严重的话,我的天啊,下层的service变动,我上层的controller还要重新打包,懂了,原来是这个原因 spring还能管理sqlSessionFatory druidDataSource (连接池对象),所谓的交由它来管理是指:spring来进行对象的new ,来进行对象依赖关系的维护(就是依赖注入啦) 依赖注入逻辑 controlller 类 维护关系的类,就行那个配置文件 用的时候直接从工厂里面拿就行了 工厂就是管理其他对象(生产对象和关系维护) 上面那个代码只是一个非常小的工厂,spring容器框架,是一个大而全的工厂,现在能懂这句话了吧 spring的包 spring-beanspring-contextSpring beans 是那些形成Spring应用的主干的java对象。它们被Spring IOC容器初始化,装配,和管理。这些beans通过容器中配置的元数据创建。比如,以XML文件中 的形式定义。
spring-core 还真是核心 详细内容,和核心包内容 spring-expression 啊???这是个表达式??Context可以理解为对BeanFactory的封装.包含BeanFactory选择/配置/Bean来源加载/定义容器启动流程,为其提供上下文以及丰富的拓展,这是直面使用者的接口.
添加链接描述
我的天啊,对不起,我以为spring很简单,我去看spring1去吧,太复杂了吧commons-logging 就是一日志。。希望我不被打脸Spring Expression Language(简称 SpEL)是一个支持查询和操作运行时对象的强大的表达式语言。贯穿着整个 Spring 产品组的语言。
开始了 一旦我们的项目里面有了spring环境,就是jar包 我们就能创建spring配置文件了 记住,今天学完spring之后,所有架构层面的对象,都不会再去new了 而是要从这个容器里面去取 spring测试 程序运行 NB啊,读取配置文件的那一瞬间,所有东西都弄好了,很难不不想象这里面到底有多少步骤,多么深的核心逻辑 defaultListableBeanFactory 可遍历的bean工厂 完了,classPathXmlApplicationContext里面又是一个大类 beanFactory 里面的map集合有每一个实现类实例化对象,和他的详细参数,比如是否单例,之类的 getBean 之前咱们的getBean 要根据不同的参数名去获得 他这里面直接就一个方法,传参进去就行 你信不信这个getbean 如果他能做的话,他能给你做出来一个下拉列表来 接口的实现类里面有值 getBean的两种方法,并且维护的是单例对象,这个是可以自己设置的,我先学过了 主要代码就两行 spring真NB 获得容器里的对象,看来还是直接使用(类对象)好一点,不用转换 使用名字方便一点,就类似别名一样,我的话,把名字起的和类一样把,如果没有别的需求的话 我不行了,记笔记严重的影响了我的学习进度, 非必要不记笔记 ioc容器不止spring一家 JFINAL 啊?老师说把mybatis和spring 整合在一起之后,mybatis的玩法就变了,就不用写那一堆:1、读配置文件 2、build()3、openSession 之类的,就简单了,我蛮好奇的 网上说spring本来有点复杂,但是springboot 一出来,就把其他框架比下去了,还记得我去学黑马的springboot,看那个注解感觉有点难,好期待学完了springboot的课,再去看黑马的是什么感觉 啊?可以把所有的mapper提前拿到容器里面吗??!!?!?!?!卧槽,好期待,我想试试 这些都能整合到spring里面,卧槽,老师说这事平台性的东西,真牛比啊 IOC的方式有三种吗???? 好多新知识啊,我好兴奋 application 和 ClassPathApplicationContext 是实现关系,中间隔了六层,我去^%@%$,就是一层一层套Jakarta Commons-logging(JCL)是apache最早提供的日志的门面接口。提供简单的日志实现以及日志解耦功能。
拷贝出来,就是一个新对象了就是 spring指定为原型模式之后 打印日志 就像是懒加载一样 啊,这就是多例模式啊,行吧。我想多了深拷贝不会拷贝引用类型的引用,而是将引用类型的值全部拷贝一份,形成一个新的引用类型,这样就不会发生引用错乱的问题,使得我们可以多次使用同样的数据,而不用担心数据之间会起冲突。
添加链接描述
可以看到localhost一直处于响应状态,即使退出想重新进入到主页面也是一直处于响应状态,并没有跳转到主页面。所以,使用完数据库一定要切记,关闭或者释放掉数据库连接!!!
大概是这个意思
添加链接描述
2、自定义工厂注册复杂对象 比如注册mybatis 的 SqlsessionFactory 对象到容器 这样,肯定不行 因为它的构造器需要configuration 这是个极为复杂的对象,不是我能用手init的出来的 给他一个空壳子没有用的 新的设计模式:工厂(静态工厂,实例工厂) 静态工厂注册bean 把配置文件导入进来 天啊,日志,二级缓存,懒加载我都快忘了怎么回事了 哈,果然简单 他的意思是把这个类里面的方法执行了,返回的结果放回到容器里面 不是吧这个类实例化了放 容器里面 哦,NB啊,他是通过 这个类对象 去 容器里面找 对应的东西 就是这种方式 实例工厂注册bean 非静态的话,就不能通过类名.方法名了只不过如果客户端不主动关闭,服务器可能花很长时间才能侦测到连接断了—服务器是依靠超时做这个事情的。
,后续再来说
Spring的注解大概有30多个 依赖注入部分 这个我之前已经学过了,依赖注入进什么list 什么单个值,之类的,我基本都完了,今天把spring的部分弄完了,然后明后两天敲代码,加油!!!!冲啊!!!! 依赖注入就是维护对象之间的依赖关系 set注入,这个我还记得 就是最经典的这种,要求去类中必须有set方法 因为它底层就是在调用setUrl setDriverClassName setUsername 引用其他bean的id 用ref 引用对象 简单数据类型用 value 另一种写法 我超,可以==ALT+ENTER ==引入那个p标签 老师说不要用这个,排版比较乱,认识就可以了 :p 也有两种不同的引入值方式 引入对象 引入值 construction 构造器注入 就是要依赖构造函数 现在没有无参构造了 没有无参构造,所以报错! 构造注入的方式(用的比较少)(有些jar里面不提供无参构造,就要用这个) name 和 index 二选一index 好方便啊,但是如果后期更改的话,改变了次序的话,有点小麻烦
ref 和 value 二选一 使用name 使用index 集合注入(极其重要) 就是怎么给集合的value赋值 他¥@%的听错了,原来是极其不重要,啊,笑死 array list map set 和 construction 可以混着用 效果 内部bean注入 (之前第四阶段才用springboot,这个还有点用,现在第三阶段就用spring Boot,这个没用了) 常规service 和 dao 引用的方法 内部bean注入(就是把ref 标签挪进来。。大无语了,家人们) 像不像匿名内部类 注意!!内部bean没有注册到容器当中, 仅仅是赋值了引用所以没什么用,id也不用给他 自动装配(重要) 是基于包扫描的 @Autowired 你看那个IUserService.class 是不是和 我手动去获取对象那个,差不多 我懂了,前提是容器里面要有一个类型是IUserService的对象 因为注解是直接加在实现类上的,所以自动装配了实现类 !!如果我去掉了 service 实现类上面注解,会怎么样 这个时候因为去掉了serviceImpl的注解,容器里面没有这个对象,所以会报错 报了这个错,这个错误每天对会遇到 NoSuchBeanDefinitionException 没有bean定义的异常 假如我现在有两个service 的实现类,实际项目中不会出现这种情况 spring不会知道去找那个 NoUniqueBeanDefinitionException(实际项目中基本不会出现这个错误,知道一些我有好处) 解决办法 1、 从容器当中,先 byType查找对象,如果有两个,然后再byname @Resource (和Autowired相反,Aotuwired是先byType ,再byName) 这两个想用哪个都行,反正我用第一个 其他方式 给Spring的配置文件指定外部信息 看清楚了,一定别导错了,先看后缀
包扫描
引子:添加链接描述
曹,这个笔记到底要没有用啊,为什么用context,上面不是都写着呢吗我们经常在编程中见到 context 这个单词,当然每个人有每个人的理解,它被理解为:上下文、容器等等。我想说的是,context 理解为上下文最为合适。为什么呢?我以一个在计算机系统的例子来解释一下。
spring-context你看这句话 BeanFactory选择/配置/Bean来源加载/定义容器启动流程 那我包扫描肯定要使用这个啊 spring 里面也能引入标签 或者或xml都要这个特性? 里面是这样的 好了包扫描理解了 我要弄懂这两个注解 @Resource (和Autowired相反,Aotuwired是先byType ,再byName) 说白了就是自动装配的依赖注入 @RunWith什么意思?Context可以理解为对BeanFactory的封装.包含BeanFactory选择/配置/Bean来源加载/定义容器启动流程,为其提供上下文以及丰富的拓展,这是直面使用者的接口.
添加链接描述
@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境 建议使用,因为虽然没有扩展任何功能 @contextConfiguration 的作用 它的作用应该就是用在测试类里面的 @ContextConfiguration Spring整合JUnit4测试时,使用注解引入多个配置文件 第一官方提倡不写xml,有java类代替添加链接描述
这个注解指向的这个配置文件 他把所有类都扫描成bean了 所以这个的意思就是 我差不多懂了,因为运行test类,想不每次都写,从配置文件中创建容器,和从容器里面拿东西,所以用了这个上下文参数注解 在这个测试类里面,通过读取里面的文件,类加载容器 同时把测试类也加载到容器里面了,不要为他是怎么加进去的,我不管 把测试类注进容器里面,我才能在容器里面找到他,然后把依赖注入进去,啊,我死了,他这个设计怎么这么精巧!!! 他应该是测试类专用注解,那他应该就有这个功能 怎么使用什么serivce impl 之类的,直接依赖注入,自动装配 wired (与计算机系统)联网的,连线的; autoWired 老师这个是先匹配名字,匹配不到,再去匹配类型 笑死我了,老师已经解释了这个,但是我没听懂,果然听课和理解吸收,是两个步骤啊 ioc复习 导包 老师说这四个包必须记下来 bean context core expression commons-logging 日志包 spring aop 现在是用于包代理扫描用的 配置文件 开启包扫描 druid配置文件 加载druid配置文件 第一件事就是注册容器 自动装配 原来直接打 @Test 他就能给我导包,是maven做的,快说谢谢maven 先有junit环境才能去打注解 contextConfiguration 默认去test 文件夹下找配置文件 classPath的意思添加链接描述
老师可能也没说错,因为他们编译后最终都会在这个文件夹下对于SpringBoot项目来说,classpath指的是src.main.java和src.main.resources路径以及第三方jar包的根路径,



