首页 > 代码库 > Spring零散笔记
Spring零散笔记
IOC(控制反转),也称DI(Denpendency Inject依赖注入)。
1.把自己new的东西改为由容器提供。
初始化具体bean
动态装配
2.好处:灵活配置。
控制反转:将控制权交给容器
依赖注入:setdao根据实际的dao注入(setdao依赖于实际的dao)
spring是一个IOC容器,可以实例化具体的bean,还可以动态装配。
还支持AOP:安全检查,管理transaction。
FAQ:不给提示
a.window-preferences-myeclipse-xml catalog
b.User Specified Entries - add
location:
....../spring-framework-2.5.6/dist/resources/spring-beans-2.5.xsd
Key Type:
Schema Location
Key:
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
注入类型:
1.setter(重要)
2.构造方法
3.接口注入
Id&Name:
name和id都可以,但是name中可以含有特殊字符。
简单属性注入:<property name=... value=http://www.mamicode.com/...>
Bean的scope(生存范围):
默认是sigleton:单例,每次取到的bean都是同一个。
还有prototype:取到的不是同一个,每次都创建新的对象。
还有和web相关的三种方法,较少用。
集合注入。
自动装配:
byName
byType
一般写在bean标签上,如果所有的bean都用同一种,可以使用beans的属性:dafaule-autowire
生命周期:
lazy-init (一开始不初始化,用到的时候才初始化)
init-method="init" destory-method="destory" 不要和prototype一起使用
类被初始化的时候调用init,被消亡的时候调用destory
@Autowired
默认按类型by Type
如果想用byName,使用@Qulifier
写在priavate field(第三种注入形式)--不建议,破坏封装
如果写在set上,@quailfier需要写在参数上
@Resourde(重要)
加入:j2ee/common-annotations.jar
默认按名字,名字找不到,才按类型
可以指定特定名称
推荐使用
不足:如果没有源码,就无法使用annotaton,只能使用xml
@Component
初始化的名字默认为类名首字母小写
可以指定初始化bean的名字
@Scope
@PostConstruct = init-method
@PreDestroy = destroy-method
面向切面编程:
Aspect-Oriented-Programming
好处:可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码
例如:
servlet:filter
struct:Intercepter
还可以应用于:权限检查,异常处理,效率计算,事务管理。
概念(第22集后面):
JoinPoint
PointCut
Aspect
Advice
Weave
Spring AOP配置与应用:
两种方式:使用Annotation和使用xml
Annotation:
加上对应的xsd文件spring-aop.xsd
beans.xml<aop:aspect:j-autoproxy />
此时就可以解析对应的Annotation
建立我们的拦截类
用@Aspect注解这个类
建立处理方法
用@before来注解这个方法
写明白切入点
让spring对我们的拦截器进行管理@Component
常见的Accotation:
@Pointcut
@Before
@AfterReturning
@AfterThrowing
@After
@Around
Spring整合Hibernate:
Spring指定datasource
1.参考文档,zhao dbcp.BasicDataSource
c3p0
dbcp
proxxo
在DAO或者Service中注入dataSource
在Spring中可以hi用PropertyHolderConfigure来读取Properties文件的内容。
Spring 整合Hibernate:
1.<bean..AnnotationSessionFactoryBean>
<property dataSource>
<annotationClasses>
2.引入Hibernate系列jar包
User上加Annotation
UserDAO或者UserService注入SessionFactory
jar包问题一个一个解决。
声明式的事务管理:
事务加载DAO层还是Service层?
annotation:
加入annotation.xsd
加入txManager bean
<tx:annotation-driven
在需要的事务的方法上加@Transational
需要注意,使用SessionFactory.getCurrentSession不要使用openSession
@Transactional详解:
什么时候rollback:
1.运行期异常,非运行期异常不会触发rolback
2.必须uncheck(没有catch)
3.不管什么异常,只要你catch了,spring就会放弃管理
4.事物传播特性:propagation_required
5.read_only
xml(推荐,可以同时配置很多方法)
1.<bean txManager
2.<aop:config
<aop:pointcut
<aop:advisor pointcut-ref advice-ref
3.<tx:advise:id transaction-manager=
HibernateTemplate、HibernateCallback、HibernateDaoSupport(不重要)
介绍:
设计模式:Template Method
Callback----回调、钩子(函数)
1.第一种:
<1.在Spring中初始化HibernateTemplate,注入sessionFactory
<2.DAO里注入HibernateTemplate
<3.save写getHibernateTemplate.save(0
2.第二种:
<1.从HibernateDaoSupport继承
<2.必须卸载xml文件中,无法使用Annotation,因为set方法在父类中,而且是final的
spring整个hibernate的时候使用packageToScan属性,可以让spring自动扫面对应包下面的实体类。
整合步骤:
需要的额jar包在48集。
将这些所有的jar包保存到一个位置,使用的时候直接copy。
首先加入jar包
整合Spring+Hibernate:
1.建立package
<1.dao/daoimpl/model/service/serviceimpl/test
2.建立对应的接口与类框架
S2SH_01
3.建立Spring的配置文件(建议自己保留一份经常使用的配置文件,以后用到的时候直接copy改)
4.建立数据库
5.加入Hibernate注解
<1.在实体类上加相应的注解@Entity@Id等
<2.在beans配置文件配置对应的实体类,使之受管
6.写dao service的实现
7.加入Spring注解
<1.在对应Service及DAO实现中加入@Component,让spring对其初始化
<2.在service上加入@Transactional或者使用xml方式(此处建议后者,因为更简单)
<3.在DAO中注入sessionFactory
<4.在servcie中注入DAO
<5.写dao与service的实现
8.写测试
整合Strust2
结合点:Struts2的Action由Spring产生
步骤:
1.修改web.xml加入struts的filter
2.再加入spring的listener,这样的话,webapp一旦启动,spring容器就初始化
3.规划struts的action和jsp展现
4.加入struts.xml
修改配置,有spring替代struts产生Action对象
5.修改action配置
把类名改为bean对象的名称,这个时候就可以使用首字母小写了
@Scope("prototype")不要忘记
struts的读常量顺序:
struts-default.xml----struts-plugin.xml----struts.xml----struts.properties----web.xml
中文问题:
1.struts2.1.8已经修正,只需要改i18n.encoding=gbk
2.只用spring的characterencoding
3.需要严格注意filter的顺序
4.需要加到struts2的filter前面
LazyInitializationException:
1.OpenSessionInViewFilter
2.需要严格顺序问题
3.需要加到struts2的filter前面