博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring知识点总结-1
阅读量:6815 次
发布时间:2019-06-26

本文共 8773 字,大约阅读时间需要 29 分钟。

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>。可参考:

马士兵 培训课程内容
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,如需转载请自行联系原作者

你可能感兴趣的文章
JS 中刷新页面的方法
查看>>
励志帝马云是不是你的财富导师?
查看>>
力扣算法题—088合并两个有序数组
查看>>
APP和web设计区别
查看>>
三层fragment嵌套,接口回调方式
查看>>
sfcapd服务新增nfdump安装
查看>>
C指针函数中的局部变量返回
查看>>
android 解析json数据格式
查看>>
Vs2013 头文件注释
查看>>
****** 六 ******、软设笔记【数据结构】-查找、静态查找表,哈希表
查看>>
[转] fitnesse中的Map处理
查看>>
Django博客功能实现—文章评论的显示
查看>>
JavaScript类型转换
查看>>
OnClientClick="return confirm('确定要删除吗?')"
查看>>
四则运算使用说明
查看>>
字符数组中查找字符串或字符数组
查看>>
JAVA自己理解的几种设计模式
查看>>
Android 不显示光标或者光标颜色为白色的解决方法
查看>>
C#网络编程之---TCP协议的同步通信(二)
查看>>
thinkphp-许愿墙-3
查看>>