且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Spring知识点总结-1

更新时间:2022-06-16 01:14:54

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)     Struts2interceptor
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)     HibernateTemplateHibernateCallbackHibernateDaoSupport(不重要)介绍

                i.          设计模式:Template Method

               ii.          Callback:回调/钩子函数

             iii.          第一种:(建议)

1.     spring中初始化HibernateTemplate,注入sessionFactory
2.     DAO里注入HibernateTemplate
3.     savegetHibernateTemplate.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.     在对应ServiceDAO实现中加入@Component,让spring对其初始化
2.     Service上加入@Transactional或者使用xml方式(此处建议后者,因为更简单)
3.     DAO中注入sessionFactory
4.     Service中注入DAO
5.     DAOService的实现

           viii.          写测试

c)     整合Struts2

                i.          结合点:Struts2ActionSpring产生

               ii.          步骤:

1.     修改web.xml加入 strutsfilter
2.     再加入springlistener,这样的话,webapp一旦启动,spring容器就初始化了
3.     规划strutsactionjsp展现
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.     使用springcharacterencoding
3.     需要严格注意filter的顺序
4.     需要加到Struts2filter前面

               v.          LazyInitializationException

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

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