Spring知识点总结-1

1、Spring默认的实例化阶段

默认在spring容器初始化时(即new ClassPathXmlApplicationContext("beans.xml")),对容器中的类进行实例化, 而不是getBean方法时(一般将取得的对象赋值给某个对象);当scope为prototype时,则在调用getBean方法时容器中的类被初始化了;当初始化的状态改为‘lazy-init’=true时, 则在getBean调用时才被初始化。可以设定全局的,也可设定某个类的lazy-init属性。

默认情况下(即scope为singleton)生成的对象为单例的, 当prototype时生成多例对象。

 2、指定init-method和destroy-method

 在spring的配置文件中,可以通过init-method和destroy-method指定类中那个方法需要在初始化时就执行,哪些方法需要在容器关闭时被执行。可以通过执行AbstractBeanFactory的close()方法来销毁容器来进行实验。

 
 
  1. package cn.company.service.impl; 
  2.  
  3. import cn.company.service.PersonService; 
  4.  
  5. public class PersonServiceBean implements PersonService { 
  6.     public void init(){ 
  7.         System.out.println("初始化"); 
  8.     } 
  9.     public PersonServiceBean(){ 
  10.         System.out.println("我被实例化了"); 
  11.     } 
  12.     public void save(){ 
  13.         System.out.println("我是save()方法"); 
  14.     } 
  15.      
  16.     public void destory(){ 
  17.         System.out.println("开闭打开的资源"); 
  18.     } 

 

 
 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans 
  5.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 
  6.           <bean id="personService" class="cn.company.service.impl.PersonServiceBean" lazy-init="false"  
  7.           init-method="init" destroy-method="destory"> 
  8.              
  9.           </bean> 
  10. </beans> 

3、在Bean中为构造函数指定参数

 

  使用构造子注入时,则使用constructor-arg子标签,来指定构造函数的参数。
<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider">
    <constructor-arg>
        <value>This is a configurable message</value>
    </constructor-arg>
</bean>
       当构造函数有多个参数时,可以使用constructor-arg标签的index属性,index属性的值从0开始。
<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider">
    <constructor-arg index="0">
        <value>first parameter</value>
    </constructor-arg>
    <constructor-arg index="1">
        <value>second parameter</value>
    </constructor-arg>
</bean>
或者
 
 
  1. <bean id="personService" class="cn.company.service.impl.PersonServiceBean"> 
  2.             <constructor-arg index="0" type="cn.company.dao.PersonDao" ref="personDao"/> 
  3.             <constructor-arg index="1" value="播客"/> 
  4. </bean> 
 
4、 设置null值

  要将一个属性null,需要通过<null />标签,如果不设置,则属性为默认值(在实例化时)而不是null。  <property name=”name”><null /> </property>。可参考:http://blog.163.com/jack-chen10/blog/static/67751282009813112916553/

马士兵 培训课程内容
1.      面向接口(抽象)编程的概念与好处
2.     IOC/DI 的概念与好处
a)     inversion of control
b)     dependency injection
3.     AOP 的概念与好处
4.     Spring 简介
5.     Spring 应用IOC/DI (重要)
a)     xml
b)     annotation
6.     Spring 应用AOP (重要)
a)     xml
b)     annotation

7.     Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要)

a)     opensessionInviewfilter (记住,解决什么问题,怎么解决)
8.     Spring JDBC
面向接口编程(面向抽象编程)
1.      场景:用户添加
2.     Spring_0100_AbstractOrientedProgramming
a)      不是AOP:Aspect Oriented Programming
3.      好处:灵活
什么是IOCDI),有什么好处
1.      把自己new 的东西改为由容器提供
a)      初始化具体值
b)      装配
2.      好处:灵活装配
Spring简介
1.      项目名称:Spring_0200_IOC_Introduction
2.      环境搭建
a)      只用IOC

                i.          spring.jar , jarkata-commons/commons-loggin.jar

3.     IOC 容器
a)      实例化具体bean
b)      动态装配
4.     AOP 支持
a)      安全检查
b)      管理transaction
Spring IOC配置与应用
1.     FAQ: 不给提示:
a)     window – preferences – myeclipse – xml – xml catalog
b)     User Specified Entries – add

                 i.          Location:       D:\share\0900_Spring\soft\spring-framework-2.5.6\dist\resources\spring-beans-2.5.xsd

                ii.          URI:             file:///D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resources/spring-beans-2.5.xsd

               iii.          Key Type:      Schema Location

              iv.          Key:              http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

2.      注入类型
a)     Spring_0300_IOC_Injection_Type
b)     setter (重要)
c)      构造方法(可以忘记)

d)     接口注入(可以忘记)

3.     id vs. name
a)     Spring_0400_IOC_Id_Name
b)     name 可以用特殊字符
4.      简单属性的注入
a)     Spring_0500_IOC_SimpleProperty
b)     <property name=… value=….>
5.     <bean  中的scope 属性
a)     Spring_0600_IOC_Bean_Scope
b)     singleton  单例
c)     proptotype  每次创建新的对象
6.      集合注入
a)     Spring_0700_IOC_Collections
b)      很少用,不重要!参考程序
7.      自动装配
a)     Spring_0800_IOC_AutoWire
b)     byName
c)     byType
d)      如果所有的bean 都用同一种,可以使用beans 的属性:default-autowire
8.      生命周期
a)     Spring_0900_IOC_Life_Cycle
b)     lazy-init ( 不重要)
c)      init-method destroy-methd 不要和prototype一起用 (了解)
9.     Annotation 第一步:

a)     修改xml文件,参考文档<context:annotation-config />

10. @Autowired
a)      默认按类型by type
b)      如果想用 byName,使用@Qulifier
c)      写在private field (第三种注入形式)(不建议,破坏封装)
d)      如果 写在set上,@qualifier需要写在参数上
11. @Resource (重要)
a)      加入:j2ee/common-annotations.jar
b)      默认按名称,名称找不到,按类型
c)      可以指定特定名称
d)      推荐使用
e)      不足:如果没有源码,就无法运用annotation ,只能使用xml
12. @Component @Service @Controller @Repository
a)      初始化的名字默认为类名首字母小写
b)      可以指定初始化bean 的名字
13. @Scope
14. @PostConstruct = init-method; @PreDestroy = destroy-method;
 
什么是AOP
1.      面向切面编程Aspect-Oriented-Programming
a)      是对面向对象的思维方式的有力补充
2.     Spring_1400_AOP_Introduction
3.      好处:可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码
a)     Filter
b)     Struts2 interceptor
4.      概念:
a)     JoinPoint
b)     PointCut
c)     Aspect (切面)
d)     Advice
e)     Target
f)      Weave
Spring AOP配置与应用
1.      两种方式:
a)      使用Annotation
b)      使用xml
2.     Annotation
a)      加上对应的xsd 文件spring-aop.xsd

b)     beans.xml <aop:aspectj-autoproxy />

c)     此时就可以解析对应的Annotation

d)      建立我们的拦截类
e)      @Aspect 注解这个类
f)       建立处理方法
g)      @Before 来注解方法
h)      写明白切入点(execution …….
i)       spring 对我们的拦截器类进行管理@Component
3.      常见的Annotation:
a)     @Pointcut
b)     @Before
c)     @AfterReturning
d)     @AfterThrowing
e)     @After
f)      @Around
4.      织入点语法
a)     void !void
b)      参考文档(* ..
5.     xml 配置AOP
a)      interceptor 对象初始化
b)     <aop:config

                i.          <aop:aspect …..

1.     <aop:pointcut
2.     <aop:before
Spring整合Hibernate
1.     Spring  指定datasource
a)      参考文档,找dbcp.BasicDataSource

                i.          c3p0

               ii.          dbcp

             iii.          proxool

b)      DAO 或者Service 中注入dataSource
c)      Spring 中可以使用PropertyPlaceHolderConfigure 来读取Properties 文件的内容
2.     Spring 整合Hibernate
a)     <bean .. AnnotationSessionFactoryBean>

                i.          <property dataSource

               ii.          <annotatedClasses

b)      引入hibernate  系列jar
c)     User 上加Annotation
d)     UserDAO 或者UserServie  注入SessionFactory
e)     jar 包问题一个一个解决
3.      声明式的事务管理
a)      事务加在DAO 层还是Service 层?
b)     annotation

                i.          加入annotation.xsd

               ii.          加入txManager bean

             iii.          <tx:annotation-driven

             iv.          在需要事务的方法上加:@Transactional

               v.          需要注意,使用SessionFactory.getCurrentSession 不要使用OpenSession

c)     @Transactional 详解

                i.          什么时候rollback

1.      运行期异常,非运行期异常不会触发rollback
2.      必须uncheck ( 没有catch)
3.      不管什么异常,只要你catch 了,spring 就会放弃管理
4.      事务传播特性:propagation_required
5.     read_only
d)     xml (推荐,可以同时配置好多方法)

                i.          <bean txmanager

               ii.          <aop:config

1.     <aop:pointcut
2.     <aop:advisor pointcut-ref advice-ref

             iii.          <tx:advice: id transaction-manager =

e)     HibernateTemplate HibernateCallback HibernateDaoSupport (不重要)介绍

                i.          设计模式:Template Method

               ii.          Callback:回调/钩子函数

             iii.          第一种:(建议)

1.      spring 中初始化HibernateTemplate ,注入sessionFactory
2.     DAO 里注入HibernateTemplate
3.     save getHibernateTemplate.save();

             iv.          第二种:

1.      HibernateDaoSupport 继承
2.      必须写在xml 文件中,无法使用Annotation ,因为set 方法在父类中,而且是final
f)      spring 整合hibernate 的时候使用packagesToScan 属性,可以让spring 自动扫描对应包下面的实体类
Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2
1.      需要的jar 包列表
jar 包名称
所在位置
说明
antlr-2.7.6.jar
hibernate/lib/required
解析HQL
aspectjrt
spring/lib/aspectj
AOP
aspectjweaver
..
AOP
cglib-nodep-2.1_3.jar
spring/lib/cglib
代理,二进制增强
common-annotations.jar
spring/lib/j2ee
@Resource
commons-collections-3.1.jar
hibernate/lib/required
集合框架
commons-fileupload-1.2.1.jar
struts/lib
struts
commons-io-1.3.2
struts/lib
struts
commons-logging-1.1.1
单独下载,删除1.0.4(struts/lib)
struts
spring
dom4j-1.6.1.jar
hibernate/required
解析xml
ejb3-persistence
hibernate-annotation/lib
@Entity
freemarker-2.3.13
struts/lib
struts
hibernate3.jar
hibernate
 
hibernate-annotations
hibernate-annotation/
 
hibernate-common-annotations
hibernate-annotation/lib
 
javassist-3.9.0.GA.jar
hiberante/lib/required
hibernate
jta-1.1.jar
..
hibernate transaction
junit4.5
 
 
mysql-
 
 
ognl-2.6.11.jar
struts/lib
 
slf4j-api-1.5.8.jar
hibernate/lib/required
hibernate-log
slf4j-nop-1.5.8.jar
hibernate/lib/required
 
spring.jar
spring/dist
 
struts2-core-2.1.6.jar
struts/lib
 
xwork-2.1.2.jar
struts/lib
struts2
commons-dbcp
spring/lib/jarkata-commons
 
commons-pool.jar
..
 
struts2-spring-plugin-2.1.6.jar
struts/lib
 
2.     BestPractice
a)      将这些所有的jar 包保存到一个位置,使用的时候直接copy
3.      步骤
a)      加入jar
b)      首先整合Spring + Hibernate

                i.          建立对应的package

1.     dao / dao.impl / model / service / service.impl/ test

               ii.          建立对应的接口与类框架

1.     S2SH_01

             iii.          建立spring的配置文件(建议自己保留一份经常使用的配置文件,以后用到的时候直接copy改)

             iv.          建立数据库

               v.          加入Hibernate注解

1.      在实体类上加相应注解@Entity @Id
2.      beans 配置文件配置对应的实体类,使之受管

             vi.          dao service的实现

            vii.          加入Spring注解

1.      在对应Service DAO 实现中加入@Component ,让spring 对其初始化
2.      Service 上加入@Transactional 或者使用xml 方式(此处建议后者,因为更简单)
3.      DAO 中注入sessionFactory
4.      Service 中注入DAO
5.      DAO Service 的实现

           viii.          写测试

c)      整合Struts2

                i.          结合点:Struts2ActionSpring产生

               ii.          步骤:

1.      修改web.xml 加入 struts filter
2.      再加入spring listener ,这样的话,webapp 一旦启动,spring 容器就初始化了
3.      规划struts action jsp 展现
4.      加入struts.xml

a)     修改配置,由spring替代struts产生Action对象

5.      修改action 配置

a)     把类名改为bean对象的名称,这个时候就可以使用首字母小写了

b)     @Scope(“prototype”)不要忘记

             iii.          struts的读常量:

1.      struts-default.xml
2.      struts-plugin.xml
3.      struts.xml
4.      struts.properties
5.      web.xml

             iv.          中文问题:

1.     Struts2.1.8 已经修正,只需要改i18n.encoding = gbk
2.      使用spring characterencoding
3.      需要严格注意filter 的顺序
4.      需要加到Struts2 filter 前面

               v.          LazyInitializationException

1.     OpenSessionInViewFilter
2.      需要严格顺序问题
3.      需要加到struts2 filter 前面
 
 

 本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/417035,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值