spring框架归纳

来源:互联网 发布:北京淘宝培训一对一 编辑:程序博客网 时间:2024/06/01 12:23
1、 sping(轻量级框架,不依赖服务器,低锲入式(没有实现sping的东西))春天框架:组件Bena
1.1 IOC:超大级容器(管理pojo组件:工厂+反射)
1.2 AOP:面向切面编程
1.3 Javabean不需要管理(如果有行为则需要管理)
在Windows上文件夹的空格读取为%20
反射:解耦
tx:事务
管理组件:就是new组件,维护组件与组件之间的关系,解耦
容器不能管理接口,但是可以管理他的实现类
sping容器(都是接口):beansFactor(父类)
applicationcontext(子类)主要,但是启动时比较慢,使用快,国际化支持
设值注入:ref关联关系(依赖注入DI(控制反转:控制权交出去,再反转回来):一个组件需要完成他的功能的时,需要依赖容器(set方法,在返回程序))、value值,
构造注入:构造方法
设值可以有set,构造。。。。
属性:property/引用时用ref bean
构造:constructor-arg /index/引用时用ref bean(一次性注入)
默认情况下容器是单实列,容器不会管理克隆出来的组件,由虚拟机回收;singleton,单实列作用域,在容器内部。并发量高:prototype
自动
一、byname用的是设值注入,是通过属性名称进行的装配,需要提供对应的setter方法,根据名称回到容器中查找,与该民称相同那个组件是否存在,不存在装配不成功,运行null异常
二、bytype,通过属性的类型装配,如果是接口就找接口的实现类,没有就不成功,null异常,如果有多个,会有nouniquebeandefnit。。。
三、constructor 根据参数属性名称(不一),其他的差不多

当自动和手动同时存在是推荐使用手动,自动不清晰,不利于维护
适用于非注解下

不用缓存,时数据库热点数据可以存在list、map、set之类的集合里面
**********************************************************
# Java EE —— Spring
Spring 2个主要研究部分:
1. IOC 就是一个容器(这个容器主要就是工厂+反射),管理的是普通java类(pojo),不管理javabean
2. AOP 面向切面编程
Spring框架:
替换了EJB容器的功能。
>
1. 低侵入式的设计,代码污染极低。
2. spring 容器降低了业务对象替换的复杂性,提高了组件之间的解耦。 组件之间的解耦一般就是通过第三方来解耦,而这个第三方就是配置文件。
3. Spring 的高开发性。因为开发者可以选择spring的部分或者全部,并没有强制要求要使用所有部分。
4. Spring的AOP支持允许将一些通用任务如:安全,事务,日志等进行集中式处理,从而提供了更好的复用。(4,5暂未学)
5. Spring的ORM和DAO提供了与第三方持久化框架的良好整合,并简化了底层的数据库访问。
Spring框架的基础:
工厂模式与服务器定位模式。
---
> 在windows中 文件夹名字之间可以添加空格,而在java中,java读取路径的时候,读取后,空格会显示为"%20" ,所以这时候最好对路径进行转换 → str.replace("%20"," ")
---
Spring框架的作用:
1. 管理bean组件,bean组件主要包含(各个层次的实现类,数据源,session工厂,事务管理器) ---其实就是在配置中new了一次组件, 实现了组件之间的解耦。
2. 维护组件与组件之间的关系。
## IOC
能够作为spring容器的:
1. BeanFactory(父) 他产生实例的时候,是用到哪个实例产生哪个实例。 开启速度快,但是运行的时候效率比较低
2. ApplicationContext(子) 他是BeanFactory 接口的子接口,他增强了BeanFactory的功能(比如国际化支持)。他产生实例的时候,是把容器中所有的实例都先产生。要用的时候直接获取就可以了。所以他开启的时间要长一些,但是运行时候的效率很高。
这2个都是接口,所以要用他们的实现类来作为容器。
ApplicationContext的是实现类:
1. ClassPathXmlApplicationContext
2. FileSystemXmlApplicationContext
3. AnnotataionConfigApplicationContext
依赖注入(DI)也叫控制反转:
指在程序运行中,需要另外一个对象的协作(比如说调用对方的属性,行为的时候),不需要在代码中创建被调用者,而是依赖容器的注入。
>注意: 2 个对象都须是被容器管理的。
通过这种依赖注入,JavaEE应用中的各种组件不需要以硬编码方式耦合在一起。
Spring 同时支持2种依赖注入的方式:
1. 设值注入
2. 构造注入
设值注入:

设值注入是指IOC容器使用属性的Setter方法来注入被依赖的实例。这种注
入方式简单、直观,因而在Spring的依赖注入里大量使用。
在xml中使用的是
<bean id = "xxx" class = "xxx">
<property name="xxxx" ref="xxxx"></property>
</bean>
构造注入:
在构造实例的时候,已经未其完成了依赖关系的初始化,这种通过构造方式来
设置依赖关系的叫构造注入
xml中表现:
<bean id = "xxx" class = "xxx">
<constructor-arg index="0">
<!--index 带参构造的第几个参数,从0开始-->
<ref bean="userDao"/>
</constructor-arg> -->
</bean>
2种注入方式的区别:
1. 设值注入方式简单,直观。更容易理解,(特别是后来人员)容易维护。
2. 构造注入,如果依赖关系比较复杂,那么就构造函数就显得十分臃肿,难以阅读。
3. 如果有注入顺序的要求,那么还是构造注入比较好,因为他可以规定注入的顺序。
4. 依赖关系确定不会发生改变的时候,也可以使用构造注入。
---
容器创建的对象是单实例的,注意是单实例,不是单例。就是指在容器范围内,只有一个实例。在默认情况,就是单实例。 设置作用域在<bean>的属性中scope设置。
scope的值:
1. scope = "singleton" → 单实例作用域,,就在容器范围内部只有一个实例存在,也就是调用不管多少次,都是同一个实例,容器会管理实例的生命周期。(并发量高,可能会导致数据的混乱)
2. scope = "prototype" → 原型作用域(克隆作用域) 就是调一次,容器就会产生一个新的对象。宛如克隆,容器不会负责克隆出来的实例的生命周期。他的生命周期由jvm负责, 由JVM来负责回收。(表现层的部分尽量采用这种)
3. scope = "request" → 请求作用域。在同一个http请求范围内,都是容器负责管理生命周期
4. scope = "session" → 会话作用域。在同一个会话范围内,都是容器负责管理生命周期
spring 容器也提供了自动装配:
1. autowire = byname,通过属性的名称来进行装配,需要程序提供对应的setter(),根据属性的名称回到容器中查找与该名称一致的组件是否存在,如果存在就装配注入,如果不存在,装配将不会成功,也不会报错,在程序运行的时候的才会报错(空指针异常)。
2. autowire = byType,通过属性的类型来进行装配,如果类型是接口,那么就去找接口的实现类,如果没有找到,那么装配不成功,不会报错,但是在运行的时候,通常还是会报nullPointException。如果找到一个,正常装配成功。如果找到多个,会报出NoUniqueBeanDefinitionException,表示找多了,不知道应该装配哪一个。依旧需要提供set方法。
3. autowire = constructor,在自动装配的时候,会根据构造器中参数属性的名称去查找容器,如果找到了就装配成功,如果找不到也不会报错,运行还是会报空指针。
>总结:当手动装配与自动装配同时存在时,以手动为主。自动装配虽然方便,但是不推荐。因为自动装配结构不清晰,维护起来十分困难。
---
当服务器采用分布式后,虽然每台服务器的数据库连接数变小了,但是多了后,仍然会大量的操作到数据库。 当采用缓存的技术来缓解数据库连接的压力的时候,可以的。但是如果一开始没有采用到缓存的时候怎么办呢?

那么就可以将热点内容,定值内容放入到服务器的内存中。当用户访问的时候,先判断内存中有没有,有就返回,没有再操作数据库。 这个功能就可以在 spring框架的配置中,配置进去。 spring中设置组件的属性的时候也有,<list\>,<set\>,<map\>,<props\>
<list> 内部的设置:
<value>xxxx</value>
<ref bean="xxxx"/>
<set> 内部的设置:
<value>xxxx</value>
<ref bean="xxxx"/>
<map> 内部的设置:

<entry key="键" value="普通值"></entry>
<entry key="键" value-ref="引用"></entry>

<props> 内部的设置:

<prop key="键">值</prop>
<prop key="username">lovo</prop>



0 0
原创粉丝点击